You are coming a long way, baby~Thinking, feeling, memory...
Tin是一個熱愛收集最佳實踐的程序員。曾經在小型Java團隊中擔任架構師,后在新浪郵件部門領導RIA團隊進行開發,目前是自由程序員,接受Java/ RIA/ RoR項目和咨詢。 業余時間積極進行敏捷實踐和參與社區討論,對RoR和Django感興趣。在社區中還積極參與開源項目的文檔中文化工作。目前為InfoQ中文站做社區編輯。 業余愛好:編程、硬件、Mac、美術、音樂(Rock)、電影、攝影、集圖、集郵、Quake3、旅行、美食
原本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的集中基本訪問方式:#、%{}、${}
以上內容,錯漏難免。因為今天終于可以偷閑,趕緊結繩記之。歡迎大家討論更簡便的方法。
Powered by: BlogJava Copyright © Tin