2013-10-29 96 views
1

我有消息存儲攔截Struts中的2個問題刪除錯誤,我在我的struts.xml文件中的下列行爲:Struts 2的消息存儲在攔截器重定向沒有

<action name="rfi" method="add" class="org.test.action.RfiAction"> 
    <interceptor-ref name="store"> 
     <param name="operationMode">AUTOMATIC</param> 
    </interceptor-ref> 
    <interceptor-ref name="defaultStack" /> 
    <result name="error">../display/irrt/rfi.jsp</result> 
    <result name="input">../display/irrt/rfi.jsp</result> 
    <result name="success" type="redirectAction"> 
     <param name="actionName">rfis</param> 
     <param name="namespace">/irrt</param> 
    </result> 
</action> 

當行動回報成功地,它重定向到列出的動作,成功消息被攔截器正確保存和檢索。

但是,當發生錯誤時,沒有重定向,它會轉到列出的JSP頁面,但錯誤不會顯示(所有其他數據都會)。就像MessageStoreInterceptor在運行時清除錯誤變量的內容一樣,如果沒有發生重定向,當前操作不再有錯誤消息。

當攔截器設置爲STORE或AUTOMATIC模式時(即使攔截器在AUTOMATIC模式下不應運行,結果不包含重定向),也會發生這種情況。

我的代碼只添加錯誤或消息。它從不刪除它們。動作代碼如下:

private String add() 
{ 
    try 
    { 
     // add the rfi entry 
     this.rfiService.addRfi(this.rfiEntry, this.getLoggedInUser()); 
    } 
    catch(ConnectionException e) 
    { 
     this.addActionError("Could not add RFI entry."); 
     e.printStackTrace(); 

     return ERROR; 
    } 

    // set success message 
    this.addActionMessage("RFI entry added."); 

    return SUCCESS; 
} 

這是用來顯示消息的JSP代碼:

<s:if test="hasActionErrors() == true"> 
    <s:iterator value="actionErrors"> 
     <p class="text"><b><font color="red"><s:property /></font></b></p> 
    </s:iterator> 
</s:if> 
<s:elseif test="hasActionMessages() == true"> 
    <s:iterator value="actionMessages"> 
     <p class="text"><b><font color="green"><s:property /></font></b></p> 
    </s:iterator> 
</s:elseif> 

這個問題的任何幫助,將不勝感激。

回答

0

我錯過了包含錯誤的特定頁面上的包含。

道德故事:不要假設每個其他頁面上的代碼都在不工作的代碼上。

0
<result name="success" type="redirectAction"> 
     <param name="actionName">rfis</param> 
     <param name="namespace">/irrt</param> 
    </result> 

的redirectAction rfis也應該通過store攔截。

<action name="rfis" class="..." method="..."> 
    <interceptor-ref name="store"> 
     <param name="operationMode">AUTOMATIC</param> 
    </interceptor-ref> 
    <interceptor-ref name="defaultStack" /> 
    <result ..../> 
</action> 
+0

'rfis'動作通過攔截器。這涉及rfi動作,當它轉到「錯誤」或「輸入」結果(根本沒有重定向的結果)時。當它通過這些結果時,操作錯誤不會顯示出來。 –

+0

你的意思是說使用's:actionerror'或's:actionmessage'不顯示錯誤/消息? –

+0

這是正確的。我使用上面的迭代器遍歷動作錯誤或消息,但是,我只是嘗試了s:actionerror和s:actionmessage標記,但它仍然不顯示。 –