原本javaeye有這么一篇帖子“在WebWork2 Action中如何自動設置Array、List、Map”,是moxie大哥寫的。
http://forum.javaeye.com/viewtopic.php?t=8770
但是已經是2004年11月的文章了,在webwork 2.2 b4中,XWorkList和XWorkMap已經是deprecated狀態了,當時我就一頭霧水,也沒找到什么好的線索。
去java.net下載了XWork的最新代碼,看到了其中的注釋,說這個工作已經可以自動完成了。
又幾經周折,才算搞明白先在如何讓List、Map等工作起來,給予2.2 b4和b5工作正常:
下面簡單介紹一下:
1、如果要將值映射到pojo的collection,則需要使用conversion功能。
如我又一個Action,叫testAction:



























對應一個pojo:






















可以看到,上面的Action聲明的時候沒有任何涉及到XWorkList的地方(moxie介紹的那種風格),也就是說現在webwork并不知道Collection里面放的pojo的類型。這就是Webwork目前的高明之處,這樣的代碼非常干凈。但是如果要自動設定Collection的值,訪問到這些Pojo,則一定要知道Pojo的類型,Webwork如何做呢?
通過-conversion配置。
需要在對應該才那個testAction.java的相同目錄寫一個testAction-conversion.properties文件(格式就是Action名字+“-conversion.properties”)。
文件里面注明:
Element_someAttrs = org.tin.test.SomeAttr (以前版本曾經用過Collection、Map分開,但是現在不管什么類型,都用Element)
格式就是“Element_”+Action中Collection的名字+“=”+你的pojo的完整類名
如此配置后,自動設置值的時候就可以知道你的pojo的類型了,很干凈。
下面一小段由于我接觸Webwork不久,所以是個很初級的經驗,如果需要則自取:
回憶moxie帖子中的重要的部分,在post到相應action的頁面的form中,input要遵循這樣的命名:
對應剛才所說的那個pojo:











如何輸出?很簡單,在列表頁中:









即可以,因為iteratror這個tag支持iteratroStatus這個東西,用它可以獲取index、isOdd等信息,很方便。
配合



則很容易的實現對Collection的CRUD。正好用到了ONGL的集中基本訪問方式:#、%{}、${}
以上內容,錯漏難免。因為今天終于可以偷閑,趕緊結繩記之。歡迎大家討論更簡便的方法。