struts基于ognl的自动类型转换需要注意的地方

王朝学院·作者佚名  2016-08-27  
宽屏版  字体: 小 | 中 | 大 | 超大  

好吧,坎坷的过程我就不说了,直接上结论:

在struts2中使用基于ognl的自动类型转换时,Action中的对象属性必须同时添加get/set方法。

例如:

客户端表单:

<s:formaction="registPRo"><s:textfieldname="user.id"label="id"/><s:textfieldname="user.name"label="用户名"/><s:textfieldname="user.pass"label="密码"/><s:textfieldname="user.age"label="年龄"/><s:textfieldname="user.birth"label="生日"/><s:submitvalue="注册"/></s:form>

Action代码:

publicclassRegistActionextendsActionSupport {privateUser user;

@OverridepublicString execute()throwsException {

System.out.println("age: " +user.getAge());returnSUCCESS;

}publicvoidsetUser(User user) {

System.out.println("in setUser : " +user.getAge());this.user =user;

}publicUser getUser() {// 必须添加get方法,否则在execute方法中无法获得user对象的任何属性。returnuser;

}

}

一开始我认为只要set方法就行了,想当然的只写了set方法。我认为当struts获取到表单参数组装成一个user对象以后,会通过set方法把组装好的user对象设置进Action。

但是最后我在set方法中打印传递进来的user对象值时发现所有的属性都是默认值,当然在execute方法中也无法获取user的值。

经过这个bug我猜测(仅仅是猜测,没有看源代码,如果哪位大神知道请告诉我)调用set方法是仅仅获取的是个空对象,当在execute方法中直接调用user属性值时会再去调用get方法获取 有值 的user对象。

郁闷了将近一天,就剩没有调试源代码了(因为myeclipse中绑定sun.reflect包源代码时出现点问题,所以没有调试成功,幸好没有调试,否则更晕!!!)。

望小伙伴们不要再犯我这样的错误

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有