熟悉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;
}
}
分享到:
相关推荐
《XWork 2.1.5:Web框架的核心组件与应用》 XWork是一个Java Web开发中的关键框架,它的核心在于提供了一套强大的动作处理...通过深入理解和掌握XWork,开发者可以更好地利用其特性,提升Web应用的开发效率和质量。
xwork-1.1.1.jar, xwork-1.1.jar, xwork-1.2.1.jar, xwork-1.2.3.jar, xwork-2.0.0.jar, xwork-2.0.1.jar, xwork-2.0.3.jar, xwork-2.0.4.jar, xwork-2.0.5.jar, xwork-2.0.6.jar, xwork-2.0.7.jar, xwork-2.1.0.jar...
JavaEE源代码 xwork-2.0.4JavaEE源代码 xwork-2.0.4JavaEE源代码 xwork-2.0.4JavaEE源代码 xwork-2.0.4JavaEE源代码 xwork-2.0.4JavaEE源代码 xwork-2.0.4JavaEE源代码 xwork-2.0.4JavaEE源代码 xwork-2.0.4JavaEE源...
标题 "xwork" 暗示我们关注的是一个与软件框架或库相关的概念,特别是它在Java企业级开发中的应用。XWork是一个历史悠久的开源项目,它是Struts 1框架的核心部分,负责处理Action的执行逻辑。Struts是Apache软件基金...
《深入理解XWork框架:官方源码解析》 XWork是一个强大的Action框架,它为Java Web应用程序提供了模型-视图-控制器(MVC)模式的支持。这个框架的主要目标是简化企业级应用的开发,提高代码的可维护性和可扩展性。...
在实际开发中,利用XWork进行项目构建,可以提高开发效率,降低维护成本。通过对源码的学习,我们可以更有效地定位和解决问题,同时也可以为自己的项目贡献代码,参与到开源社区的发展中去。 总之,XWork作为Struts...
通过深入学习其源码,开发者不仅可以提升技能,也能更好地利用xwork解决实际问题,为项目带来更高的质量和效率。对于有志于深入研究Web应用开发的程序员来说,xwork-2.0.7无疑是一份宝贵的资源。
通过学习这些文档,开发者可以更好地理解XWork的工作原理,从而更有效地利用Struts2框架构建高质量的Java Web应用程序。 **四、实际应用场景** XWork在实际开发中的应用广泛,如: 1. **企业级应用**:大型企业...
xwork对异常处理进行了封装,当Action执行过程中抛出异常时,会根据配置的异常处理策略进行处理。此外,xwork支持国际化,可以方便地切换不同语言环境,为用户提供多语言支持。 七、总结 通过对xwork-2.0.4源码的...
通过分析和运行这个项目,开发者可以快速掌握如何在自己的项目中有效地利用XWork和Struts2。 在使用Eclipse或MyEclipse查看源码时,你可以: 1. 导入源码工程,这将帮助你理解代码结构和类之间的关系。 2. 使用IDE...
ActionContext管理了请求上下文中的所有信息,包括值栈、session、request和response等;ActionProxy是执行动作的代理,它负责创建并执行ActionInvocation;而ActionInvocation则是执行动作的实际载体,它封装了调用...
3. **ActionContext**:该类封装了当前请求的上下文信息,如参数、session、request和response对象等。它为Action提供了一个全局的访问环境。 4. **TypeConverter**:xwork提供了强大的类型转换机制,TypeConverter...
1. **设计理念**:XWork强调的是动作(Action)和业务逻辑的分离,通过Action来处理用户请求,而业务逻辑则被封装在服务层。这种设计使得代码更易于维护和测试。 2. **依赖注入(DI)**:XWork支持依赖注入,允许...
《深入解析xwork 2.x源码:从2.1.2到2.2.1的演进》 xwork作为一个强大的Action框架,是Struts2的核心组成部分,它提供了动作处理、类型转换、数据校验等功能,对于Java Web开发者而言,理解其源码有助于提升对MVC...
通过对XWork源代码的深入研究,我们可以更好地理解它的运行机制,从而在实际开发中更高效地利用这一工具。对于想要提升Java Web开发能力的开发者来说,熟悉并掌握XWork的源代码无疑是十分有益的。通过查看并分析源码...
本文将深入探讨xwork-2.0.6的源码,帮助开发者更好地理解和利用这个强大的框架。 首先,xwork-2.0.6-src中的dtd文件(Document Type Definition)是XML文档类型定义,它们定义了XML文档的结构和语法规则。例如,...
通过这份“最新文档”,开发者不仅可以掌握XWork的基本使用,还能了解到最新的特性和改进,以便于在实际项目中更好地利用XWork构建高效、稳定的企业级应用。深入理解这些知识点,将有助于提升开发效率,降低维护成本...
1. **ActionInvocation**:这是执行Action的核心接口,它封装了Action的执行过程,包括调用Action方法和执行拦截器链。 2. **InterceptorStack**:实现了拦截器链的管理,根据配置顺序依次调用每个拦截器。 3. **...
深入研究Xwork的源代码,我们可以学习到如何优雅地实现MVC架构,如何利用拦截器增强应用的灵活性,以及如何设计可扩展的框架。这对于提升Java Web开发技能,理解Struts2框架的工作方式,以及解决实际开发中的问题都...
开发者可以利用这些资源快速理解和应用XWork,提升项目的开发效率。 总的来说,OpenSymphony公司的xWork资源包是Java开发者的得力助手,它通过提供强大的动作管理、类型转换、数据校验和结果映射等功能,帮助开发者...