zoukankan      html  css  js  c++  java
  • 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包源代码时出现点问题,所以没有调试成功,幸好没有调试,否则更晕!!!)。

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

  • 相关阅读:
    「B/S端开发」如何将DevExtreme组件添加到React应用程序?
    完整UI组件库Kendo UI for Vue R3 2021
    DevExpress WPF界面控件
    DevExpress WinForm MVVM数据和属性绑定指南(Part 1)
    界面控件Telerik UI for WinForm初级教程
    ua-parser-js 实现获取浏览器信息和操作系统信息
    vue--axios 拦截器的简单介绍及使用场景
    css 插件
    去除List集合中的重复值(四种好用的方法)
    常州大学/企业微信/电费查询脚本
  • 原文地址:https://www.cnblogs.com/caiyao/p/4856789.html
Copyright © 2011-2022 走看看