Controller负责给Service组装参数,调用Service,将Service的结果放到需要渲染的页面里面。最核心的业务逻辑还是有Service来负责完成。
以下的代码摘抄自《精通spring4.x企业应用开发实战》,代码版权属于该书作者。
例子一:
/**
* 添加一个主题帖
*
* @param request
* @param topic
* @return
*/
@RequestMapping(value = "/board/addTopic", method = RequestMethod.POST)
public String addTopic(HttpServletRequest request,Topic topic) {
User user = getSessionUser(request);
topic.setUser(user);
Date now = new Date();
topic.setCreateTime(now);
topic.setLastPost(now);
forumService.addTopic(topic);
String targetUrl = "/board/listBoardTopics-" + topic.getBoardId()
+ ".html";
return "redirect:"+targetUrl;
}
下面是forumService.addTopic(topic),该方法的代码。
/**
* 发表一个主题帖子,用户积分加10,论坛版块的主题帖数加1
* @param topic
*/
public void addTopic(Topic topic) {
Board board = (Board) boardDao.get(topic.getBoardId());
board.setTopicNum(board.getTopicNum() + 1);
topicDao.save(topic);
//topicDao.getHibernateTemplate().flush();
topic.getMainPost().setTopic(topic);
MainPost post = topic.getMainPost();
post.setCreateTime(new Date());
post.setUser(topic.getUser());
post.setPostTitle(topic.getTopicTitle());
post.setBoardId(topic.getBoardId());
postDao.save(topic.getMainPost());
User user = topic.getUser();
user.setCredit(user.getCredit() + 10);
userDao.update(user);
}
例子二:
/**
* 回复主题
*
* @param request
* @param post
* @return
*/
@RequestMapping(value = "/board/addPost")
public String addPost(HttpServletRequest request, Post post) {
post.setCreateTime(new Date());
post.setUser(getSessionUser(request));
Topic topic = new Topic();
int topicId = Integer.valueOf(request.getParameter("topicId"));
if (topicId >0) {
topic.setTopicId(topicId);
post.setTopic(topic);
}
forumService.addPost(post);
String targetUrl = "/board/listTopicPosts-"
+ post.getTopic().getTopicId() + ".html";
return "redirect:"+targetUrl;
}
下面是forumService.addPost(post)的代码:
/**
* 添加一个回复帖子,用户积分加5分,主题帖子回复数加1并更新最后回复时间
* @param post
*/
public void addPost(Post post){
postDao.save(post);
User user = post.getUser();
user.setCredit(user.getCredit() + 5);
userDao.update(user);
Topic topic = topicDao.get(post.getTopic().getTopicId());
topic.setReplies(topic.getReplies() + 1);
topic.setLastPost(new Date());
//topic处于Hibernate受管状态,无须显示更新
//topicDao.update(topic);
}