Struts2:拦截器和参数

时间:2010-09-29 19:15:58

标签: struts2

我用Struts 2完成了一些页面。(J2EE项目) 一切都很好,直到我尝试添加一个拦截器。

拦截器似乎删除了 jsp 发送的类操作和参数的所有属性,其中包含以下网址:操作?param = xxx

这是拦截器:

public class SessionInterceptor extends AbstractInterceptor{    
    @Override
    public String intercept(ActionInvocation invocation) throws Exception {

        return invocation.invoke();     
}

这是struts.xml:

    <action name="movefc_ShowFjt" class="struts2.ShowFjtAction" method="movefc">

        <interceptor-ref name="sessionInterceptor"></interceptor-ref>
        <result name="input" type="dispatcher">jsp/showFjt.jsp</result>
        <result name="success" type="dispatcher">jsp/showFjt.jsp</result> 
    </action>    

在集体诉讼中,

public class ShowFjtAction extends ActionSupport {


private String param;
private Personne p;

param属性永远不会从jsp接收值(当拦截器关闭时它是正常的)。更糟糕的是,Class动作中的其他属性似乎被删除了。 这是拦截器的 return invocation.invoke(); 的正常效果吗? 我能做些什么来解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

定义自己的拦截器是否导致所有默认拦截器被丢弃?

您是否应该定义包含拦截器和默认堆栈的拦截器堆栈?

<package name="default" extends="struts-default">
   <interceptors>
        <interceptor name="sessionInterceptor" class="SessionInterceptor"/>
        <interceptor-stack name="myStack">
           <interceptor-ref name="sessionInterceptor"/>
        </interceptor-stack>
    </interceptors>

<action name="movefc_ShowFjt"
     class="struts2.ShowFjtAction">
         <interceptor-ref name="myStack"/>
         <result name="input" type="dispatcher">jsp/showFjt.jsp</result>
         <result name="success" type="dispatcher">jsp/showFjt.jsp</result> 
</action>

答案 1 :(得分:2)

整个概念解释如下

1]首先,当用户没有写入任何拦截器时,将使用struts-default.xml中定义的拦截器。它在struts-core.jar中定义,它是通过扩展我们的包xml标记中扩展的“ struts-default ”来实现的。

2]如果在sessionInterceptor引用名称之后添加一个模式代码块,即interceptor-ref name =“defaultStack”将解决您的问题,用户编写自己的拦截器。

尝试尝试解压缩struts-core.jar并继续执行。