关于struts2 action中map类型属性的映射

08-04-04 confuse
现有一个POJO类User,里面有个属性name以及对应的getName,setName方法;
在对应的UserAction类里面有个Map名为 dyncMap;
同时对应的jsp页面里面也有个控件 <s:textfield name="dyncMap['user'].name"> </s:textfield>
我想把这个控件的值set到一个User对象的name上去,然后再把这个User对象放到dyncMap中去 e.g.: dyncMap.get("user").getName();
如果dyncMap泛型定义成 Map <String, User> dyncMap的话,就没有问题能够实现自动绑定; 但我这个dyncMap里面不是所有元素的类型都是User的,有的是 <String, User> 有的是 <String, OtherClass>;这样的话我如何改写ognl表达式"dyncMap['user'].name"能够达到绑定的目的呢?
或者在UserAction-conversion.properties文件中能不能指定Map里面某个key对应的value对象的类型呢?
例如key = 'user'则是User类; = 'other'则是Other类;
谢谢了!

banq
2008-04-07 10:19
建议不要搞那么复杂,让别人理解你的程序还暗藏玄机,直接用两个Map。

confuse
2008-04-08 17:09
恩,主要现在设计的总共就一个action,里面有个map动态的存储每个页面上的值,然后给这个action注入2个变量:一个表示对应的service类,另一个表示该service类的具体方法,这样可以通过一个action动态的调用不同的service类进行处理。
例如
<action name="login" class="commAction" method="doOperation">
<param name="service">loginService</param>
<param name="operation">login</param> <result>/WEB-INF/pages/xxxxx.jsp</result>
</action>
感觉这样做得好处是不用再为每个页面写个action,而且所有界面元素都存入同一个map,说白了这个map就是个动态的DTO。
但是需要用BeanUtil把map里的值转换到具体的pojo bean里面去,也就是DTO--〉pojo的转换;所以我才想干脆把pojo直接放到map里,但是由于是动态的,每个页面相关的pojo都不一样,无法在一个action里面指定到底这个map里面的元素是啥类型。 不过现在我觉得把pojo直接暴露到页面级别并不好,毕竟pojo里的属性很多页面都用不倒,所以还是用DTO过渡下好。

猜你喜欢