Struts2 ModelDriven

1.某某对象myobj(包含两个属性,int id,String content)注入action,在页面表单的input.name属性中使用myobj.id和myobj.content的方式传入参数,通过调试看到Struts2已经自动调用了myobj对象的相应set方法而且有值,但是返回到action的execute方法时又发现值莫名其妙的丢失了,百般不得其解。

2.怀疑是没有实现ModelDriven<T>接口,试验之后发现情况并没有改变,仍旧是set有值,action方法无值。

3.原因是,为了图代码简便,便只在action类中写了myobj对象的set方法,却没有写get方法,因为理论上是无需设置get方法的,JavaBean中通过PropertyDescriptor类或其他来解析bean属性的set/get方法,真正执行的时候不必两个方法都有。可见Struts2解析要求比较严格(没有查看Struts2源码),见下面参考的内容。

EOF.另外,即使不使用set/get方法,也可以为类的私有属性赋值的,可以使用JavaReflect反射包中的Field类来为属性set值。

参考:http://www.360doc.com/content/11/0406/20/1947337_107663126.shtml

Struts2 的 Action 在设置每一个属性时都会 get 一下相应的元素 getUser() 或 getUsers()。 对于 3,在设置 user.name 和 user.pass 之前都会 getUser() 来获取 user 属性,如果 user 为 null 就构造 User 对象,然后设置相应的值。

你可能感兴趣的:(struts2,reflect,javabean,modelDriven)