2010-09-29 122 views
0

我已经用Struts 2做了一些页面。(J2EE项目) 一切都好,直到我尝试添加一个拦截器。Struts2:拦截器和参数

看来,拦截删除我的Action类的所有属性和参数由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>  

在类action中,

public class ShowFjtAction extends ActionSupport { 


private String param; 
private Personne p; 

PARAM属性从未从JSP(它是确定当拦截器是关闭的)接收的值。更糟的是,集体诉讼中的其他财产似乎被抹去了。 这是返回invocation.invoke()的正常结果吗?拦截器的? 有什么我可以做的,以解决这个问题?

+0

你如何定义这个拦截器?你是否包含defaultStack? – Trick 2010-10-04 15:07:36

回答

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> 
+0

第一个测试显示你是对的。我相信Struts.xml中的是可选的,但事实上,你似乎必须使用它。 – cyberfred 2010-10-05 20:08:12

+0

ParamatersInterceptor从您的jsp页面获取值并将其设置在操作字段中。同样,其他拦截器还有其他重要的事情要做。了解内置拦截器的功能以及任何拦截器的移除或改变顺序的影响是很好的。 – 2013-05-08 12:59:55

2

整个概念解释如下

1]首先,当用户不写入任何拦截器,然后在支柱-default.xml中定义的拦截器将被使用。它在struts-core.jar中定义,它通过扩展在我们的包xml标签中扩展的“struts-default”来实现。

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

Befor试着尝试解压struts-core.jar,然后继续执行。