我用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(); 的正常效果吗? 我能做些什么来解决这个问题吗?
答案 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并继续执行。