|
锁定老贴子 主题:怎么不让PO 进入JSP中?
精华帖 (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! 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2005-02-02
还有一个问题:
我界面需要 5个投票项,这些数据在 voteTable这个表里面.它和Maintopic是多对一. 现在我在构建Form Bean 的时候不知道怎么办好, 这个Form Bean 因该即包含 MainTable 里面的字段属性,又包含VoteTable里面的属性吧. 首先根据mainId 得到一个bbsMain. showMainTopicForm.setVoteItem1(bbsMain.getVoteTables()); 不知道怎么写了 |
|
| 返回顶楼 | |
|
时间:2005-02-03
把你取出的东西集合排序一下啊
或者在配置文件中加上排序方式! |
|
| 返回顶楼 | |
|
时间: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 |
|
| 返回顶楼 | |
|
时间: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 |
|
| 返回顶楼 | |
|
时间:2005-02-03
你应该单独分出serice层出来,在action中调用serice层的业务方法。也可以不写vo,直接把po传给view显示。虽然robin不建议这么做。呵呵。
|
|
| 返回顶楼 | |
|
时间: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的标签可以显示出来的。 |
|
| 返回顶楼 | |
|
时间:2005-02-03
关于排序的问题,今天和QQ 上的一位朋友聊天,(因为我hibernate主键生成方式是uuid.hex. )我hibernate得到的子类 集合 Set 里面的 PO 实例 顺序 就是 不固定的。见附图。
和struts的标签没关系,前面一位朋友说,取出来排序,我实在不知道怎么排. |
|
| 返回顶楼 | |
|
时间:2005-02-03
梅 写道 关于排序的问题,今天和QQ 上的一位朋友聊天,(因为我hibernate主键生成方式是uuid.hex. )我hibernate得到的子类 集合 Set 里面的 PO 实例 顺序 就是 不固定的。见附图。
和struts的标签没关系,前面一位朋友说,取出来排序,我实在不知道怎么排. 最简便的办法: sql order by 某可比较的字段 实在不行 你把需要排序的对象实现Comparable 接口。 然后把他们放到List中,调用Collections.sort(list)即可。 |
|
| 返回顶楼 | |
|
时间:2005-02-04
建议用List代替Set,在put in List的时候检查是否已经存在
|
|
| 返回顶楼 | |











