`

java站内消息的解决方案

 
阅读更多

内容来自: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");

        }

    }

    });

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics