struts基于ognl的自动类型转换需要注意的地方
好吧,坎坷的过程我就不说了,直接上结论:
在struts2中使用基于ognl的自动类型转换时,Action中的对象属性必须同时添加get/set方法。
例如:
客户端表单:
<s:form action="registPro"> <s:textfield name="user.id" label="id"/> <s:textfield name="user.name" label="用户名"/> <s:textfield name="user.pass" label="密码"/> <s:textfield name="user.age" label="年龄"/> <s:textfield name="user.birth" label="生日"/> <s:submit value="注册"/> </s:form>
Action代码:
public class RegistAction extends ActionSupport { private User user; @Override public String execute() throws Exception { System.out.println("age: " + user.getAge()); return SUCCESS; } public void setUser(User user) { System.out.println("in setUser : " + user.getAge()); this.user = user; } public User getUser() { // 必须添加get方法,否则在execute方法中无法获得user对象的任何属性。 return user; } }
一开始我认为只要set方法就行了,想当然的只写了set方法。我认为当struts获取到表单参数组装成一个user对象以后,会通过set方法把组装好的user对象设置进Action。
但是最后我在set方法中打印传递进来的user对象值时发现所有的属性都是默认值,当然在execute方法中也无法获取user的值。
经过这个bug我猜测(仅仅是猜测,没有看源代码,如果哪位大神知道请告诉我)调用set方法是仅仅获取的是个空对象,当在execute方法中直接调用user属性值时会再去调用get方法获取 有值 的user对象。
郁闷了将近一天,就剩没有调试源代码了(因为myeclipse中绑定sun.reflect包源代码时出现点问题,所以没有调试成功,幸好没有调试,否则更晕!!!)。
望小伙伴们不要再犯我这样的错误
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!