struts2留言显示问题,头疼好几天了。

项目中用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="&amp;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 去数据库重新取一下,分先给了。。

6个回答

[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] 到显示页面。
留主的排序,这个你最好是在留言保存的时候存一个创建时间,然后根据创建时间来进行排序。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问