浏览 3263 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-02
最后修改:2010-12-02
之前有2种方案: 第一种是修改struts2 tag的源代码. 比如http://jolestar.iteye.com/blog/160360 第二种就是彻底妥协,在action里面把list bean转成数组,赋给checkboxlist的value属性. 这两种solution都不是那么优雅,作为一个有房贷没希望的IT民工我不禁问自己: 怎么能对自己的要求这么低呢? 怎么能应付了事呢? 翻文档,研究了下ognl的语法,终于让我找到了一种方便的写法. JavaBean public class Operate extends BaseBean { private long id; private String name; } Action中初始化allOpList和myOpList. private List<Operate> myOpList; private List<Operate> allOpList; 前台jsp用strtus2标签生成checkboxlist <s:checkboxlist name="myOpList.id" list="allOpList" listValue="name" listKey="id" value="myOpList.{#this.id}"/> checkboxlist标签用allOpList的内容生成checkbox, 并且用myOpList的值选中默认. 并且当页面提交的时候,又能自动把checkbox的选中情况,赋给myOpList.Operate.id属性. 这样从后到前到再到后,全都是用list bean去完成,用法统一,不要转换,全部操作的是bean而不是数组. 精华在于myOpList.{#this.id}这个ognl表达式,自动生成[4, 11]这种格式的数组. 引申一下,ognl的语法强大到可以myOpList.{?#this.enable > 0}来做过滤,看着有点Jquery的味道,非常好用. 有同志会说,这种过滤没有什么意义,不如在后台sql里面做. 假设一个应用场景: 全部用户信息是放在cache里面的list,根据前一个页面来过滤男女,然后显示. 这时候这个过滤表达式就发挥作用了,不用您在后台一个一个过滤重新组装list了. userInfoist.{?#this.sex > 0} 简洁而优雅,这下能过自己这关了. PS:各位喜欢投新手贴的同志,请确认这种solution不是第一次有人给出,或者您有更优雅的solution. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |