`
mozhenghua
  • 浏览: 318973 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

利用xwork封装request parameter

 
阅读更多

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

 

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

 

 

import java.lang.reflect.Field;
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());

	}
}
 

 

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;
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics