2010-09-29 181 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,然後繼續執行。