采用Ajax实现发布帖子功能
异步请求——网页不刷新,还要访问服务器,服务器返回一些网页结果,通过结果提炼出的一些数据对网页进行局部刷新
实现功能
当用户点击主页面【我要发布】按钮时,在弹出的内容框可进行帖子(包括帖子标题及帖子内容)的发布,后台会帖子内容进行敏感词过滤后将帖子发布
controller层
@Controller
@RequestMapping("/discuss")
public class DiscussPostController {
@Autowired
private DiscussPostService discussPostService;
@Autowired
private HostHolder hostHolder;
@RequestMapping(value = "/add",method = RequestMethod.POST)
@ResponseBody
public String addDiscussPost(String title,String content){
//判断是否登录
User user = hostHolder.getUser();
if(user==null){
//还未登陆无权限访问
return CommunityUtil.getJsonString(403,"还未登陆!");
}
DiscussPost post=new DiscussPost();
post.setUserId(user.getId());
post.setTitle(title);
post.setContent(content);
post.setCreateTime(new Date());
discussPostService.addDiscussPost(post);
return CommunityUtil.getJsonString(0,"发布成功!");
}
}
service层
//插入帖子
public int addDiscussPost(DiscussPost post){
if(post==null){
throw new IllegalArgumentException("参数不能为空!");
}
//转移HTML标记
post.setTitle(HtmlUtils.htmlEscape(post.getTitle()));
post.setContent(HtmlUtils.htmlEscape(post.getContent()));
//对post中的数据进行敏感词过滤
post.setTitle(sensitiveFilter.filter(post.getTitle()));
post.setContent(sensitiveFilter.filter(post.getContent()));
return discussPostMapper.insertDiscussPost(post);
}
dao层
//实现插入帖子功能
int insertDiscussPost(DiscussPost discussPost);
mapper.xml
<!--提取插入字段-->
<sql id="insertFields">
user_id,title,content,type,status,create_time,comment_count,score
</sql>
<!-- int insertDiscussPost(DiscussPost discussPost); -->
<insert id="insertDiscussPost" parameterType="DiscussPost">
insert into discuss_post(<include refid="insertFields"></include>)
values(#{userId},#{title},#{content},#{type},#{status},#{createTime},#{commentCount},#{score})
</insert>
js
$(function(){
$("#publishBtn").click(publish);
});
function publish() {
$("#publishModal").modal("hide");
//获取标题和内容
var title=$("#recipient-name").val();//id选择器
var content=$("#message-text").val();
//发送异步请求(POST)
$.post(
CONTEXT_PATH+"/discuss/add",
{"title":title,"content":content},
function(data){
data=$.parseJSON(data);
//在提示框中返回消息
$("#hintBody").text(data.msg);
//显示提示框
$("#hintModal").modal("show");
//两秒后自动隐藏
setTimeout(function(){
$("#hintModal").modal("hide");
//判断是否发送成功
if(data.code==0){
window.location.reload(); //重新加载页面
}
}, 2000);
}
);
}