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