论坛首页 Java版 Hibernate

怎么不让PO 进入JSP中?

浏览 6648 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2005-02-02
都说PO 不该出现在表示层,就是JSP 中吧。但是当我action中通过
[code:1] StringBuffer hql =new StringBuffer().append(" from org.erp.po.BbsMain bbsMain where bbsMain.mainId = ? or bbsMain.bbsMain.mainId=?");[/code:1]

得到到一个List结果result 然后把[code:1] request.setAttribute("BbsMains",result);[/code:1] 最后再
jsp中通过[code:1] <logic:iterate id="BbsMain" name="BbsMains">[/code:1]循环显示主题和回复,

在这个过程中我不知不觉就把PO 放到表示层了,我知道这么做不好,但是不知道怎么改。
另外如果这个主题还有附件,(附件保存在单独的一个表里面)显示附件的图片时候,
[code:1] <logic:iterate id="BbsMain" name="BbsMains">
。。。。。。
<logic:iterate id="Additional" name="BbsMain" property="additionals">
<BR><img border="0" src="bbsUpload<bean:write name='Additional' property='address'/>"><BR>
</logic:iterate></center>
。。。。。
</logic:iterate>
[/code:1]

一个可怕的问题出现了。就是图片的顺序不固定。 3张图片,一会儿它在上面一会儿再看就另一张再上面了。

真头疼! can you help me? thank you very much!
   
时间:2005-02-02
还有一个问题:

我界面需要 5个投票项,这些数据在 voteTable这个表里面.它和Maintopic是多对一. 现在我在构建Form Bean 的时候不知道怎么办好, 这个Form Bean 因该即包含 MainTable 里面的字段属性,又包含VoteTable里面的属性吧.
首先根据mainId 得到一个bbsMain.
showMainTopicForm.setVoteItem1(bbsMain.getVoteTables());
不知道怎么写了
   
0 请登录后投票
时间:2005-02-03
把你取出的东西集合排序一下啊

或者在配置文件中加上排序方式!
   
0 请登录后投票
时间:2005-02-03
梅 写道
都说PO 不该出现在表示层,就是JSP 中吧。但是当我action中通过
[code:1] StringBuffer hql =new StringBuffer().append(" from org.erp.po.BbsMain bbsMain where bbsMain.mainId = ? or bbsMain.bbsMain.mainId=?");[/code:1]

得到到一个List结果result 然后把[code:1] request.setAttribute("BbsMains",result);[/code:1] 最后再
jsp中通过[code:1] <logic:iterate id="BbsMain" name="BbsMains">[/code:1]循环显示主题和回复,

在这个过程中我不知不觉就把PO 放到表示层了,我知道这么做不好,但是不知道怎么改。


既然你用的是struts,那当然就要编写一个FormBean了,把PO中相应的数据拷到FormBean中, <logic:iterate>显示出来就好了!

你也可以看看这个: http://forum.javaeye.com/viewtopic.php?t=627
   
0 请登录后投票
时间:2005-02-03
梅 写道
还有一个问题:

我界面需要 5个投票项,这些数据在 voteTable这个表里面.它和Maintopic是多对一. 现在我在构建Form Bean 的时候不知道怎么办好, 这个Form Bean 因该即包含 MainTable 里面的字段属性,又包含VoteTable里面的属性吧.
首先根据mainId 得到一个bbsMain.
showMainTopicForm.setVoteItem1(bbsMain.getVoteTables());
不知道怎么写了


struts的FormBean感觉还是比较强大的, 虽然好多人对它的存在有异议!

FormBean中的field不仅支持基本类型,还支持其他对象的类型的,还有MAP等等,构造FormBean可以灵活点啊

看看这个,应该可以解决的:
http://morgan.blogchina.com/blog/article_32671.515146.html
   
0 请登录后投票
时间:2005-02-03
你应该单独分出serice层出来,在action中调用serice层的业务方法。也可以不写vo,直接把po传给view显示。虽然robin不建议这么做。呵呵。
   
0 请登录后投票
时间:2005-02-03
po,vo和formbean是不同层次的东西。Hibernate的po比较强大,可以运行在service层,当作vo来使用。他们三者之间的转化不是绝对的,而是根据需求来的。曾经看到一篇文章,严格区分formbean,vo和po,文章大概有以下几个观点:
1. formbean只是页面数据表示的一个javabean,因此,所有的字段都是String或者String[],因为formbean中的数据事实上都是request.getParameter的结果。对于一个User类,可能是这样:
[code:1]
public class UserForm {
private String name;
private String password;
private String age;
private String birthday;
......
}
[/code:1]
2.vo是在service层运行的对象,成为业务逻辑层的数据表现方式,因此,上述类可能就变成:
[code:1]
public class UserVO {
private String name;
private String password;
private int age;
private Date birthday;
......
}
[/code:1]
3.po是在数据持久层运行的对象,取决于数据库的设计和需求。

好,按照作者的观点作出的设计,formbean和vo,甚至po之间在不同的层次运行,甚至其中的字段类型都不同,转化当然是必要的。

但是现在呢?我们的很多设计根本不是这样,至少vo和po可以基本划等号。而formbean更加不是全部都是String类型,在这样的情况下,是否需要进行转化,我认为这个根据你的业务需求和开发的观念。

我个人认为,Hibernate的po已经相对比较强大,在脱离了session之后也能保持状态,因此,po几乎可以当作vo来用,如果页面的表示和po,vo几乎没有差别,我认为可以不作任何转化直接传过去,用struts,ww,jstl等各种你能想到的标签表现出来就完事了。

那什么时候需要做转化呢?我认为在表示层的表现和po不一致,出现一个formbean的字段分布在不同的po中的时候,还是需要构造一个formbean,进行转化。

另外,楼主的问题,是对象嵌套的问题,把对象直接定义在formbean里面,struts的标签可以显示出来的。
   
0 请登录后投票
时间:2005-02-03
关于排序的问题,今天和QQ 上的一位朋友聊天,(因为我hibernate主键生成方式是uuid.hex. )我hibernate得到的子类 集合 Set 里面的 PO 实例 顺序 就是 不固定的。见附图。


和struts的标签没关系,前面一位朋友说,取出来排序,我实在不知道怎么排.
  • 3a4d0f74-6fe0-4d58-98f3-52731b52a00d-thumb
  • 描述:
  • 大小: 113 KB
   
0 请登录后投票
时间:2005-02-03
梅 写道
关于排序的问题,今天和QQ 上的一位朋友聊天,(因为我hibernate主键生成方式是uuid.hex. )我hibernate得到的子类 集合 Set 里面的 PO 实例 顺序 就是 不固定的。见附图。


和struts的标签没关系,前面一位朋友说,取出来排序,我实在不知道怎么排.

最简便的办法:
sql order by 某可比较的字段

实在不行
你把需要排序的对象实现Comparable 接口。
然后把他们放到List中,调用Collections.sort(list)即可。
   
0 请登录后投票
时间:2005-02-04
建议用List代替Set,在put in List的时候检查是否已经存在
   
0 请登录后投票
论坛首页 Java版 Hibernate

跳转论坛:
JavaEye推荐