调用拦截器时Struts2输入值丢失

时间:2010-07-18 18:19:22

标签: struts2

我有Struts2的问题

这是我的动作配置,在Action中执行roleDete之前,拦截器是调用的,但在此之后,输入的值丢失,没有id要删除,如果我删除了拦截器,那么id为删除存在,有人可以指导我解决这个问题吗?

<action name="roleDelete" method="roleDelete" class="com.webapp.role.action.RoleAction">
  <interceptor-ref name="validateUser"/>
  <result name="input" type="tiles">usertypePage</result>
  <result name="success" type="redirect">usertypeForm</result>
</action>

由于

2 个答案:

答案 0 :(得分:2)

听起来你已经定义了一个自定义的validateUser拦截器堆栈,它不包含必需的Struts 2拦截器。默认情况下,Struts 2会在每个请求上调用以下拦截器,除非您定义自己的堆栈(正如您所做的那样):

        <interceptor-stack name="defaultStack">
            <interceptor-ref name="exception"/>
            <interceptor-ref name="alias"/>
            <interceptor-ref name="servletConfig"/>
            <interceptor-ref name="i18n"/>
            <interceptor-ref name="prepare"/>
            <interceptor-ref name="chain"/>
            <interceptor-ref name="debugging"/>
            <interceptor-ref name="scopedModelDriven"/>
            <interceptor-ref name="modelDriven"/>
            <interceptor-ref name="fileUpload"/>
            <interceptor-ref name="checkbox"/>
            <interceptor-ref name="multiselect"/>
            <interceptor-ref name="staticParams"/>
            <interceptor-ref name="actionMappingParams"/>
            <interceptor-ref name="params">
              <param name="excludeParams">dojo\..*,^struts\..*</param>
            </interceptor-ref>
            <interceptor-ref name="conversionError"/>
            <interceptor-ref name="validation">
                <param name="excludeMethods">input,back,cancel,browse</param>
            </interceptor-ref>
            <interceptor-ref name="workflow">
                <param name="excludeMethods">input,back,cancel,browse</param>
            </interceptor-ref>
        </interceptor-stack>

我的建议是通过上面的列表并一次一个地添加它们,直到找出你需要正确填充你的请求变量。您可以在Struts 2 docs中了解有关拦截器的更多信息。

答案 1 :(得分:2)

     <interceptors>
        <interceptor name="vendorStoreInterceptor" class="br.org.myapp.actions.interceptors.VendorStoreInterceptor"></interceptor>

        <interceptor-stack name="defaultStack">
            <interceptor-ref name="exception"/>
            <interceptor-ref name="alias"/>
            <interceptor-ref name="servletConfig"/>
            <interceptor-ref name="i18n"/>
            <interceptor-ref name="prepare"/>
            <interceptor-ref name="chain"/>
            <interceptor-ref name="debugging"/>
            <interceptor-ref name="scopedModelDriven"/>
            <interceptor-ref name="modelDriven"/>
            <interceptor-ref name="fileUpload"/>
            <interceptor-ref name="checkbox"/>
            <interceptor-ref name="multiselect"/>
            <interceptor-ref name="staticParams"/>
            <interceptor-ref name="actionMappingParams"/>
            <interceptor-ref name="params">
              <param name="excludeParams">dojo\..*,^struts\..*</param>
            </interceptor-ref>
            <interceptor-ref name="conversionError"/>
            <interceptor-ref name="validation">
                <param name="excludeMethods">input,back,cancel,browse</param>
            </interceptor-ref>
            <interceptor-ref name="workflow">
                <param name="excludeMethods">input,back,cancel,browse</param>
            </interceptor-ref>
        </interceptor-stack>

        <interceptor-stack name="mainStack">
            <interceptor-ref name="vendorStoreInterceptor"/>
            <interceptor-ref name="defaultStack"/>
        </interceptor-stack>
    </interceptors>

    <default-interceptor-ref name="mainStack"/> 

-

使用它。你必须包括你的拦截器和defaultStack之后(用我的'vendorStoreInterceptor'和'defaultStack'观察最后一个'interceptor-stack')。

就是这样!