用struts2的標簽checkboxlist可以很方便的用生成checkbox組,但是讓其默認選中指定checkbox卻是非常麻煩.
之前有2種方案:
第一種是修改struts2 tag的源代碼.
比如http://jolestar.javaeye.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}
簡潔而優雅,這下能過自己這關了.
posted on 2010-12-02 14:09
交口稱贊 閱讀(4010)
評論(5) 編輯 收藏 所屬分類:
struts