项目中用s2sh做的用户留言功能。用户登录时根据uid获取给自己的留言信息放入map中(struts2的session)并在前台遍历显示,没有问题,现在我需要将来访者新的留言顺序显示在所有留言的上面,封装好留言对象后用dao保存到数据库中,并将留言对象放入map中,返回前台显示,这是可以显示,但新增第二条留言时,会覆盖之前的一条留言。怎么解决啊,头疼死了,帮帮忙吧。
问题补充:
数据库中保存正常,是在显示的时候覆盖了,再有我也觉得放入session不好,会占用过多内存但该怎么做呢?
问题补充:
不光是留言显示的问题,还有比如添加好友后的显示好友列表这样类似的问题,其实我就是搞不清楚应该怎么保存此类信息并在前台顺序显示。eyeqq 能说详细些吗?谢谢!
问题补充:
没有写equals和hashCode,这两个方法有什么用?
问题补充:
用了request 但新增留言显示在最后,需页面刷新后才能显示在留言列表的最上面
现在我是这样做的:
第一步: 点击好友的链接显示好友的个人主页,此时留言列表可以正常显示,步骤如下:
a:点击好友链接后提交personpage.action处理(主要是获取好友对象,根据好友对象得到好友的所有留言放入request) 代码:
personpage.action
public class PersonPageAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String personuid;
private UserBusiness userBusiness;
public void setUserBusiness(UserBusiness userBusiness) {
this.userBusiness = userBusiness;
}
public String getPersonuid() {
return personuid;
}
public void setPersonuid(String personuid) {
this.personuid = personuid;
}
@Override
public String execute() throws Exception {
if(userBusiness.isGetUser(personuid)) {
return SUCCESS;
}
return INPUT;
}
}
UserBusiness的代码:
public boolean isGetUser(String personuid) {
try {
//首先获取当前user对象
User personuser = getUser(Integer.valueOf(personuid));
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("personfriendusers", personfriendusers);
request.setAttribute("personuser", personuser);
request.setAttribute("personguestbooks", personuser.getGuestbooks());
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
b:好友个人主页jsp的留言显示代码:
//留言代码:
<form action="guestbook.action"> <textarea name="gcontent" rows="3" cols="53">
<input name="personuserid" type="hidden" value="&lt;s:property value=">"/>
<input type="submit" value="留言">
</form>
//留言显示代码
<s:iterator value="#request.personguestbooks" status="stuts">
[quote]但重定向后person.jsp页面取不到request的值[/quote]
一般的用法不会去重定向jsp页面,因为你的取数逻辑不会是放在jsp页面里面(如果有放那里,你的代码就很差劲了)。你的重定向应该去定向你的一个struts动做。重新去载入你的数据,这样做才是正确的。
你的排序问题,自增长嘛,按ID也是行的。不过推荐你用UUID。自增长很傻的。写个排序很容易,把取出来的数据再排一下,你以后也会用得到,多花点时间写一下吧。
朋友能加点分不....-_-!补充了这么多不容易啊....
[quote]留言信息放入map中(struts2的session)并在前台遍历显示[/quote]
这种信息非常没有必要放在session中。
你的问题描述不清楚,是数据库存进了正确的数据但是显示会覆盖前一条。还是数据库中就已把原有数据覆盖掉而显示是正常?
你这种数据只能是放在request中,在需要用它的时候再载入request。
解决你的问题分步来,先要确定问题出在哪。
第一个取数,你确认你的取数代码能正确的取出你所需要的数据。然后确定你所谓的“留言信息放入map中”map中是否数据正确....我怕你是map中数据key重复把留言给覆盖了。。。
顺便说一下,如果你只是要显示没有必要用map,用list就OK了。不懂你有什么特殊要求。
如果map中数据也正常那你就得去看你的jsp显示代码了。
这种问题很简单的,只要你不是用记事本写程序估计IDE都会有debug功能,熟练的使用debug能加快你解决问题的速度。
留言对象的equals和hashCode写对了吗?
......
你的personuser.guestbooks是个Set还是个List?
guestbook.action中success到哪里了?
[quote]此时返回的新增留言在最后,需刷新才能提前,这样写是不是有问题,该怎样做才能直接将回复的留言显示在留言列表的最上面呢?[/quote]
第一个你新增完成之后使用 [color=red]重定向[/color] 到显示页面。
留主的排序,这个你最好是在留言保存的时候存一个创建时间,然后根据创建时间来进行排序。