`
icomparator
  • 浏览: 18762 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

通过struts.xml配置设置栈顶值

 
阅读更多
  第一种方式:(不建议使用)
  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);
                }
            }
        }
    }
}

 

1
2
分享到:
评论

相关推荐

    struts2源代码

    - 合理组织struts.xml配置,避免过度配置。 - 利用Struts2的注解功能简化配置。 通过研究Struts2的源代码,开发者可以深入理解其工作原理,从而更好地利用框架特性,优化应用性能,并能快速定位和解决问题。同时...

    Struts2_OGNL

    第二步:配置struts.xml文件,定义一个Action类及其对应的页面结果。在这个例子中,标签定义了名为"login"的Action,而标签则指定了登录成功后跳转的页面。 第三步:编写Action类,例如ognl.OgnlAction类,该类应...

    JSON与struts2配套的架包

    2. **配置Struts2**:在Struts2的配置文件(通常是`struts.xml`)中,你需要启用JSON插件。添加如下配置: ```xml &lt;constant name="struts.enable.SMD" value="true"/&gt; &lt;constant name="struts.action.extension...

    Struts2中xwork源码

    它来源于struts.xml配置文件,是Struts2将配置信息转化为运行时对象的关键。 7. **Result**:结果是动作执行后的输出,可以是JSP、FreeMarker模板或者其他任何类型。Result接口定义了如何处理动作执行后的结果,...

    第一个struts2

    3. **配置Struts2的配置文件**:在`struts.xml`或`struts.properties`中,定义Action的映射,包括结果类型、方法名和对应的JSP页面。 4. **编写JSP页面**:使用`s`标签创建视图。例如,使用`s:form`标签创建表单,`...

    Struts2中访问web元素的例子

    在struts.xml配置文件中,将该拦截器添加到Action配置中。 以上就是Struts2中访问web元素的四种主要方式。无论是在Action类中,还是通过ActionContext或拦截器,都可以方便地获取和处理HTTP请求中的数据。熟练掌握...

    struts-api

    - `struts.xml`是Struts框架的配置文件,用于定义Action类、结果页面、拦截器等。在这里,你可以指定Action类的映射路径、返回的结果类型以及与视图层的关联。 3. **ActionContext**: - ActionContext封装了执行...

    struts2类型转换深入总结

    在Action类的字段上使用`@TypeConveter`注解可以指定特定的转换器,而全局配置文件(struts.xml或struts.properties)中的`conversion.properties`可以设置全局转换规则。 5. **转换失败的处理** 当Struts2尝试...

    Struts2实例3

    Struts2提供了一种声明式的表单验证方式,可以在Action类或XML配置文件中定义验证规则。当用户提交的数据不满足规则时,Struts2会自动处理错误并显示给用户。 9. **国际化(i18n)**: Struts2支持多语言环境,...

    自定义拦截器的实现以及拦截器的详细配置

    4. **拦截器参数**:如果拦截器需要外部配置参数,可以使用`&lt;param&gt;`标签在XML配置中传递,或者在Action类中通过注解`@InterceptorParam`传递。 总之,自定义拦截器是增强Struts2应用功能和灵活性的重要手段。通过...

    struts2官方jar包

    2. **配置文件**:Struts2的配置文件通常为struts.xml,用于配置Action、结果类型、拦截器等。通过配置文件,开发者可以指定Action与URL的映射关系,以及Action执行前后需要执行的拦截器链。 3. **拦截器...

    JQuery发送Ajax请求Struts2,并返回JSON的例子

    3. **配置Struts2的struts.xml**: 配置Action的映射和结果类型: ```xml &lt;package name="default" namespace="/" extends="struts-default"&gt; &lt;action name="struts2Action" class=...

    一个Struts2的核心拦截器例子

    - 在Struts2中,拦截器的配置主要在`struts.xml`或者`struts.properties`文件中进行。通过`&lt;interceptors&gt;`标签定义拦截器栈,然后使用`&lt;interceptor&gt;`子标签创建拦截器实例。 - 使用`&lt;interceptor-ref&gt;`标签引用...

    Struts2Demo

    这通常在struts.xml配置文件中完成,但也可以使用注解实现。映射定义了Action的名称、接收请求的路径、执行的方法等。 3. **Result**:Action执行后,会返回一个Result,告诉Struts2框架如何响应用户请求。Result...

    structs2.0源码

    XML配置文件(struts.xml或struts-default.xml等)定义Action、拦截器、结果类型等,而注解则可以直接在Action类或方法上声明,简化配置。 6. **FilterDispatcher(过滤器调度器)**:Struts2的入口点,作为Servlet...

    struts2 API

    4. **配置文件(struts.xml)**: - Struts2的配置文件定义了动作、结果、拦截器栈等,是框架行为的基础。开发者可以通过此文件来映射URL到具体的动作,设置结果类型和拦截器顺序。 5. **OGNL(Object-Graph ...

    strut2入门几个小demo

    在实践中,你可能需要配置Struts2的XML配置文件(struts.xml),定义Action类,创建相应的JSP页面,并在web.xml中添加Struts2的过滤器。Action类通常是业务逻辑的载体,而JSP页面则负责展示用户界面。通过运行这些小...

    Struts2框架基础 二

    **OGNL**(Object-Graph Navigation Language)是Struts2框架中的一个强大的表达式语言,用于获取或设置Java对象的属性值。它支持对对象图进行导航,允许开发者以简洁的方式访问对象属性和方法。 ##### 1.1 OGNL的...

    struts2 拦截器(AOP,面向切面编程)

    此外,还可以通过配置文件(struts.xml或struts.properties)来指定拦截器的执行顺序和组合。 **5. 配置拦截器** 在Struts2的配置文件中,可以使用`&lt;interceptors&gt;`标签定义全局拦截器,使用`&lt;interceptor-ref&gt;`...

Global site tag (gtag.js) - Google Analytics