deepsea00001 2008-10-03 00:26
浏览 173
已采纳

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条回答

  • eyeqq 2008-10-05 23:19
    关注

    [quote]但重定向后person.jsp页面取不到request的值[/quote]
    一般的用法不会去重定向jsp页面,因为你的取数逻辑不会是放在jsp页面里面(如果有放那里,你的代码就很差劲了)。你的重定向应该去定向你的一个struts动做。重新去载入你的数据,这样做才是正确的。

    你的排序问题,自增长嘛,按ID也是行的。不过推荐你用UUID。自增长很傻的。写个排序很容易,把取出来的数据再排一下,你以后也会用得到,多花点时间写一下吧。
    朋友能加点分不....-_-!补充了这么多不容易啊....

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题