内容来自:http://www.dev26.com/bbs/topic/191
一个站内信的简单实现方案:
设计一个表结构:
@Entity
@Table(name="e_msg")
public class Message extends AbstractId {
private User from;
private User to;
private boolean beenRead;
private String title;
private String content;
private long createdDate;
@ManyToOne
@JoinColumn(nullable=false, updatable=false)
public User getFrom() { return from; }
public void setFrom(User from) { this.from = from; }
@ManyToOne
@JoinColumn(nullable=false, updatable=false)
public User getTo() { return to; }
public void setTo(User to) { this.to = to; }
@Column(nullable=false)
public boolean getBeenRead() { return beenRead; }
public void setBeenRead(boolean beenRead) { this.beenRead = beenRead; }
@Column(nullable=false, length=Constants.VARCHAR_TITLE_LENGTH)
public String getTitle() { return title; }
@Form
public void setTitle(String title) { this.title = title; }
@Column(nullable=false, columnDefinition="TEXT")
public String getContent() { return content; }
@Form
public void setContent(String content) { this.content = content; }
@Column(nullable=false, updatable=false)
public long getCreatedDate() { return createdDate; }
public void setCreatedDate(long createdDate) { this.createdDate = createdDate; }
}
Action层的逻辑:
/**
* 消息处理Action
* */
@Controller
public class MessageContrller extends AbstractBaseController {
@RequestMapping(value = "/manage/message/add", method = RequestMethod.POST)
public ModelAndView addMessage(HttpServletRequest request,
HttpServletResponse response) {
Message message = (Message) HttpUtil.createFormBean(request,
Message.class);
String toUserName = HttpUtil.getString(request, "toUserName");
User toUser = facade.queryUser(toUserName);
message.setFrom(HttpUtil.getCurrentUser());
message.setTo(toUser);
facade.createMessage(message);
return null;
}
@RequestMapping(value = "/manage/message/list")
public ModelAndView listMessage(HttpServletRequest request,
HttpServletResponse response) {
Page page = HttpUtil.getPage(request);
User user = HttpUtil.getCurrentUser();
List messages = facade.queryMessages(user, page);
Map map = new HashMap();
map.put("page", page);
map.put("username", user.getUsername());
map.put("messages", messages);
return new ModelAndView("/manage/message/message.htm", map);
}
@RequestMapping(value = "/manage/message/delete")
public String deleteMessage(HttpServletRequest request,
HttpServletResponse response) {
Integer messageId = HttpUtil.getInt(request, "messageId");
Message message = facade.queryMessage(messageId);
facade.deleteMessage(message);
Page page = HttpUtil.getPage(request);
User user = HttpUtil.getCurrentUser();
List messages = facade.queryMessages(user, page);
return "redirect:/manage/message/list";
}
以下是前台的提示功能代码用的是js轮询:
//检查站内消息
$(document).ready(function(){
if(document.getElementById("msgCount")&&g_username){
checkMsg();//首次加载就查询一次,以后每隔一段时间查询一次
setInterval(checkMsg,9900);
}
});
function checkMsg(){
$.ajax({
type:"get",
dataType:"json",
url:"/manage/message/getMsgCount",
data:{username:g_username},
success:function(data,textStatus){
$("#msgCount").html("("+data+")");
if(parseInt(data)>0){
$("#msgCount").css("background-color","red");
}else{
$("#msgCount").css("background-color","#99CC99");
}
}
});
}