项目中用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">
姓名:<s:property value="gname">
时间:<s:property value="gtime">
内容:<s:property value="gcontent">
</s:iterator>
第二步:新添加留言:在上面个人主页上添加留言内容提交到guestbook.action(增加新留言到数据库,并且在返回到个人主页显示)
guestbook.action代码:
public class GuestbookAction extends ActionSupport {
@Override
public String execute() throws Exception {
if(guestbookBusiness.isGuestbookAdd(personuserid,gcontent)) {
HttpServletRequest request = ServletActionContext.getRequest();
User personuser = (User)request.getAttribute("personuser");
request.setAttribute("personguestbooks", personuser.getGuestbooks());
return SUCCESS;
}
return INPUT;
}
GuestbookBusiness代码如下:
public class GuestbookBusinessImpl implements GuestbookBusiness {
public boolean isGuestbookAdd(Integer personuserid,String gcontent) {
try {
User personuser = userDao.get(personuserid);
User user = (User)ActionContext.getContext().getSession().get("user");
guestbook.setGcontent(gcontent);
guestbook.setGtime(new Date());
guestbook.setGname(user.getUsername());
guestbook.setUser(personuser);
//将留言对象加入用户留言集合
personuser.getGuestbooks().add(guestbook);
guestbookDao.addGuestbook(guestbook);
HttpServletRequest request = ServletActionContext.getRequest();
//返回到Action
equest.setAttribute("personuser", personuser);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
此时返回的新增留言在最后,需刷新才能提前,这样写是不是有问题,该怎样做才能直接将回复的留言显示在留言列表的最上面呢?
问题补充:
你的personuser.guestbooks是个Set还是个List?
guestbook.action中success到哪里了?
用的是Set success后直接回person.jsp 页面
"重定向" 我去试一下 struts2好像是在struts2好像是在struts.xml配置
问题补充:
你好eyeqq 我去做了重定向 又有一个新问题: 从url看重定向成功,但重定向后person.jsp页面取不到request的值,不光留言的内容,其他request中的的值也取不到,但点击其他页面后再点击好友链接新加入的留言显示出来并且正常排序。(好友与留言用hibernate做的一对多关联映射,排序是按gid逆向排序,没有按时间排序)怎么回事呢?
问题补充:
首先谢谢你,还有加分是肯定的了,10分都给你,虽然还没有解决我的问题,但已经给了我很多好的建议。我在做一下重定向action 去数据库重新取一下,分先给了。。