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



























對(duì)應(yīng)一個(gè)pojo:






















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











如何輸出?很簡(jiǎn)單,在列表頁(yè)中:









即可以,因?yàn)閕teratror這個(gè)tag支持iteratroStatus這個(gè)東西,用它可以獲取index、isOdd等信息,很方便。
配合



則很容易的實(shí)現(xiàn)對(duì)Collection的CRUD。正好用到了ONGL的集中基本訪問(wèn)方式:#、%{}、${}
以上內(nèi)容,錯(cuò)漏難免。因?yàn)榻裉旖K于可以偷閑,趕緊結(jié)繩記之。歡迎大家討論更簡(jiǎn)便的方法。