第一种方式:(不建议使用) ActionContext.getContext().getValueStack().push(obj); 第二种方式: 配置struts.xml中配置自定义拦截器如下: <interceptors> <interceptor-stack name="mystack"> <interceptor-ref name="defaultStack"> <param name="modelDriven.refreshModelBeforeResult">true</param> </interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="mystack" /> 查看[ModelDrivenInterceptor]源码: public class ModelDrivenInterceptor extends AbstractInterceptor { protected boolean refreshModelBeforeResult = false; public void setRefreshModelBeforeResult(boolean val) { this.refreshModelBeforeResult = val; } @Override public String intercept(ActionInvocation invocation) throws Exception { Object action = invocation.getAction(); if (action instanceof ModelDriven) { ModelDriven modelDriven = (ModelDriven) action; ValueStack stack = invocation.getStack(); Object model = modelDriven.getModel(); if (model != null) { stack.push(model); } if (refreshModelBeforeResult) { invocation.addPreResultListener(new RefreshModelBeforeResult(modelDriven, model)); } } return invocation.invoke(); } /** * Refreshes the model instance on the value stack, if it has changed */ protected static class RefreshModelBeforeResult implements PreResultListener { private Object originalModel = null; protected ModelDriven action; public RefreshModelBeforeResult(ModelDriven action, Object model) { this.originalModel = model; this.action = action; } public void beforeResult(ActionInvocation invocation, String resultCode) { ValueStack stack = invocation.getStack(); CompoundRoot root = stack.getRoot(); boolean needsRefresh = true; Object newModel = action.getModel(); // Check to see if the new model instance is already on the stack for (Object item : root) { if (item.equals(newModel)) { needsRefresh = false; } } // Add the new model on the stack if (needsRefresh) { // Clear off the old model instance if (originalModel != null) { root.remove(originalModel); } if (newModel != null) { stack.push(newModel); } } } } }
相关推荐
- 合理组织struts.xml配置,避免过度配置。 - 利用Struts2的注解功能简化配置。 通过研究Struts2的源代码,开发者可以深入理解其工作原理,从而更好地利用框架特性,优化应用性能,并能快速定位和解决问题。同时...
第二步:配置struts.xml文件,定义一个Action类及其对应的页面结果。在这个例子中,标签定义了名为"login"的Action,而标签则指定了登录成功后跳转的页面。 第三步:编写Action类,例如ognl.OgnlAction类,该类应...
2. **配置Struts2**:在Struts2的配置文件(通常是`struts.xml`)中,你需要启用JSON插件。添加如下配置: ```xml <constant name="struts.enable.SMD" value="true"/> <constant name="struts.action.extension...
它来源于struts.xml配置文件,是Struts2将配置信息转化为运行时对象的关键。 7. **Result**:结果是动作执行后的输出,可以是JSP、FreeMarker模板或者其他任何类型。Result接口定义了如何处理动作执行后的结果,...
3. **配置Struts2的配置文件**:在`struts.xml`或`struts.properties`中,定义Action的映射,包括结果类型、方法名和对应的JSP页面。 4. **编写JSP页面**:使用`s`标签创建视图。例如,使用`s:form`标签创建表单,`...
在struts.xml配置文件中,将该拦截器添加到Action配置中。 以上就是Struts2中访问web元素的四种主要方式。无论是在Action类中,还是通过ActionContext或拦截器,都可以方便地获取和处理HTTP请求中的数据。熟练掌握...
- `struts.xml`是Struts框架的配置文件,用于定义Action类、结果页面、拦截器等。在这里,你可以指定Action类的映射路径、返回的结果类型以及与视图层的关联。 3. **ActionContext**: - ActionContext封装了执行...
在Action类的字段上使用`@TypeConveter`注解可以指定特定的转换器,而全局配置文件(struts.xml或struts.properties)中的`conversion.properties`可以设置全局转换规则。 5. **转换失败的处理** 当Struts2尝试...
Struts2提供了一种声明式的表单验证方式,可以在Action类或XML配置文件中定义验证规则。当用户提交的数据不满足规则时,Struts2会自动处理错误并显示给用户。 9. **国际化(i18n)**: Struts2支持多语言环境,...
4. **拦截器参数**:如果拦截器需要外部配置参数,可以使用`<param>`标签在XML配置中传递,或者在Action类中通过注解`@InterceptorParam`传递。 总之,自定义拦截器是增强Struts2应用功能和灵活性的重要手段。通过...
2. **配置文件**:Struts2的配置文件通常为struts.xml,用于配置Action、结果类型、拦截器等。通过配置文件,开发者可以指定Action与URL的映射关系,以及Action执行前后需要执行的拦截器链。 3. **拦截器...
3. **配置Struts2的struts.xml**: 配置Action的映射和结果类型: ```xml <package name="default" namespace="/" extends="struts-default"> <action name="struts2Action" class=...
- 在Struts2中,拦截器的配置主要在`struts.xml`或者`struts.properties`文件中进行。通过`<interceptors>`标签定义拦截器栈,然后使用`<interceptor>`子标签创建拦截器实例。 - 使用`<interceptor-ref>`标签引用...
这通常在struts.xml配置文件中完成,但也可以使用注解实现。映射定义了Action的名称、接收请求的路径、执行的方法等。 3. **Result**:Action执行后,会返回一个Result,告诉Struts2框架如何响应用户请求。Result...
XML配置文件(struts.xml或struts-default.xml等)定义Action、拦截器、结果类型等,而注解则可以直接在Action类或方法上声明,简化配置。 6. **FilterDispatcher(过滤器调度器)**:Struts2的入口点,作为Servlet...
4. **配置文件(struts.xml)**: - Struts2的配置文件定义了动作、结果、拦截器栈等,是框架行为的基础。开发者可以通过此文件来映射URL到具体的动作,设置结果类型和拦截器顺序。 5. **OGNL(Object-Graph ...
在实践中,你可能需要配置Struts2的XML配置文件(struts.xml),定义Action类,创建相应的JSP页面,并在web.xml中添加Struts2的过滤器。Action类通常是业务逻辑的载体,而JSP页面则负责展示用户界面。通过运行这些小...
**OGNL**(Object-Graph Navigation Language)是Struts2框架中的一个强大的表达式语言,用于获取或设置Java对象的属性值。它支持对对象图进行导航,允许开发者以简洁的方式访问对象属性和方法。 ##### 1.1 OGNL的...
此外,还可以通过配置文件(struts.xml或struts.properties)来指定拦截器的执行顺序和组合。 **5. 配置拦截器** 在Struts2的配置文件中,可以使用`<interceptors>`标签定义全局拦截器,使用`<interceptor-ref>`...