2010-06-18 57 views
0

我有一個默認的包W /攔截器配置,我延伸的包放入一個又一個,並呼籲同攔截使用在Struts2擴展攔截器不起作用W /動作參數

<action name="availability**"> 
      <param name="subTab">availability</param> 
      <interceptor-ref name="tabStack"/>   
      <result>/WEB-INF/jsp/index.jsp?include=visibilit/availability.jsp</result>      
     </action> 

的問題在於我的攔截器代碼裏面沒有讀取參數:

Map params = invocation.getInvocationContext().getParameters(); 
subTab = params.get("subTab").toString(); //NULL exception 

任何想法如何將參數傳遞給擴展攔截器?

謝謝!

回答

0

()方法,你只調用從HTTP請求返回參數getParameters。該參數與被稱爲「靜態參數」設置struts.xml中,你可以訪問它們(截距()方法中)是這樣的:

ActionConfig config = invocation.getProxy().getConfig(); 
Map<String, String> parameters = config.getParams(); 
String subTab = params.get("subTab"); 

來源:StaticParametersInterceptor.java

+0

謝謝託德。我的代碼工作正常,並提取靜態參數。我的問題是,我將tabstack放置在我的堆棧def中的defaultstack之前,並且struts沒有填充params地圖。乾杯 – Ricardo 2010-06-19 10:35:34

+0

是的,staticParams攔截器默認將靜態參數添加到請求的參數映射。但是,如果您使用此方法訪問參數,則應該意識到用戶可以通過在URL末尾添加「?subTab = xyzzy」來覆蓋它們。請求參數優先於靜態參數,除非在「staticParams」攔截器上設置了「覆蓋」。 – 2010-06-21 05:06:52

0

你可以試試這個語法

<action name="availability**"> 
<interceptor-ref name="tabStack"> 
    <param name="subTab">availability</param> 
</interceptor-ref> 
</action> 

我不知道,但也許這將工作

+0

嘗試,並沒有工作,我懷疑它是struts2上的一個bug(或意想不到的特性) – Ricardo 2010-06-18 06:57:55

+0

有趣的是,如果我在包中聲明瞭攔截器,那麼它就可以工作;) – Ricardo 2010-06-18 06:58:30

+0

也許我們可以在Interceptor聲明時定義參數,而不是在引用它時 – 2010-06-18 07:08:51