随笔 - 119  文章 - 3173  trackbacks - 0
<2010年12月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

交友莫独酒,茅台西凤游。
口干古井贡,心徜洋河流。
称多情杜康,趟无量双沟。
赞中华巍巍,无此不销愁。

常用链接

留言簿(67)

随笔分类(136)

随笔档案(122)

最新随笔

搜索

  •  

积分与排名

  • 积分 - 493480
  • 排名 - 93

最新评论

用struts2的标签checkboxlist可以很方便的用生成checkbox组,但是让其默认选中指定checkbox却是非常麻烦. 

之前有2种方案: 
第一种是修改struts2 tag的源代码. 
比如http://jolestar.javaeye.com/blog/160360 
第二种就是彻底妥协,在action里面把list bean转成数组,赋给checkboxlist的value属性. 

这两种solution都不是那么优雅,作为一个有房贷没希望的IT民工我不禁问自己: 
怎么能对自己的要求这么低呢? 怎么能应付了事呢? 

翻文档,研究了下ognl的语法,终于让我找到了一种方便的写法. 


JavaBean 
  1. public class Operate extends BaseBean {  
  2.     private long id;  
  3.     private String name;  
  4. }  


Action中初始化allOpList和myOpList. 
  1. private List<Operate> myOpList;  
  2. private List<Operate> allOpList;  


前台jsp用strtus2标签生成checkboxlist 
  1. <s:checkboxlist name="myOpList.id" list="allOpList" listValue="name"  listKey="id"   
  2. 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} 


简洁而优雅,这下能过自己这关了. 


posted on 2010-12-02 14:09 交口称赞 阅读(3827) 评论(5)  编辑  收藏 所属分类: struts

FeedBack:
# re: 原创小技巧解决list做strtus2标签checkboxlist默认值无法选中的问 2010-12-02 14:50 何杨
久违,两年不见了。  回复  更多评论
  
# re: 原创小技巧解决list做strtus2标签checkboxlist默认值无法选中的问 2010-12-02 16:17 交口称赞
......................
低调  回复  更多评论
  
# re: 原创小技巧解决list做strtus2标签checkboxlist默认值无法选中的问[未登录] 2010-12-02 17:47 GreatGhoul
的确是一种比较爽的实现呀。  回复  更多评论
  
# re: 原创小技巧解决list做strtus2标签checkboxlist默认值无法选中的问 2010-12-03 09:32 交口称赞
必须的,批量初始化批量提交,结合我整的框架用起来惬意啊.  回复  更多评论
  
# Air Retro Jordan 2010-12-03 16:23 Air Retro Jordan
好好学习  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: