利用xwork封装request parameter

熟悉ssh框架的朋友在使用struts2作为mvc框架时候,会在action类上设置成员属性对应页面上提交的参数,当程序启动的时候struts2会将request中的parameter通过反射的机制自动设置到action上。struts框架会负参数责转型等问题的处理,这样一来可以大大减少web开发过程中的重复劳动,大大降低出错的概率。


如果能将该机制底层的实现流程搞清楚,将来可以将这个功能模块移植到其他框架中,那无疑会提升整体代码的优雅性。


Java代码

import ognl.OgnlRuntime;  
  
import com.opensymphony.xwork2.ActionSupport;  
import com.opensymphony.xwork2.ognl.OgnlValueStackFactory;  
import com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor;  
import com.opensymphony.xwork2.util.CompoundRoot;  
import com.opensymphony.xwork2.util.ValueStack;  
  
/** 
 * Base Action class for the Tutorial package. 
 */  
public class ExampleSupport extends ActionSupport {  
  
    /** 
     *  
     */  
    private static final long serialVersionUID = 1L;  
  
    public static void main(String[] arg) throws Exception {  
        OgnlValueStackFactory factory = new OgnlValueStackFactory();  
        factory.setXWorkConverter(new ExtendXWorkConverter());  
  
        Field field = OgnlValueStackFactory.class  
                .getDeclaredField("compoundRootAccessor");  
        field.setAccessible(true);  
  
        CompoundRootAccessor propertyAccessor = new CompoundRootAccessor();  
        field.set(factory, propertyAccessor);  
  
        factory.setContainer(new MockContainer());  
        OgnlRuntime.setPropertyAccessor(CompoundRoot.class, propertyAccessor);  
  
        ValueStack valueStack = factory.createValueStack();  
  
        User user = new User();  
        valueStack.push(user);  
        valueStack.setValue("createTime", "2012-12-12 5/24/33");  
        valueStack.setValue("name", "baisui");  
        valueStack.setValue("age", "11");  
        valueStack.setValue("gender", "true");  
        valueStack.setValue("department", new String[] { "office" });  
  
        System.out.println(user.getName());  
        System.out.println(user.getAge());  
        System.out.println(user.getDepartment());  
        System.out.println(user.getGender());  
        System.out.println(user.getCreateTime());  
  
    }  
}


Java 代码

public class User {  
    private String name;  
    private Integer age;  
        private Date createTime;  
  
    public Date getCreateTime() {  
        return createTime;  
    }  
  
    public void setCreateTime(Date createTime) {  
        this.createTime = createTime;  
    }  
    private String[] department;  
  
    private Boolean gender;  
  
    public String[] getDepartment() {  
        return department;  
    }  
  
    public void setDepartment(String[] department) {  
        this.department = department;  
    }  
  
    public Boolean getGender() {  
        return gender;  
    }  
  
    public void setGender(Boolean gender) {  
        this.gender = gender;  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public Integer getAge() {  
        return age;  
    }  
  
    public void setAge(Integer age) {  
        this.age = age;  
    }  
}



个人资料
0_0
等级:7
文章:111篇
访问:5.0w
排名: 6
上一篇: TDDL动态数据源开源-基本说明
下一篇:Solr监控
猜你感兴趣的圈子:
阿里中间件技术交流圈
标签: valuestack、department、createtime、gender、opensymphony、面试题
隐藏