2013-04-02 30 views
0

我有一個將Spring控制器與幾個常規servlet結合在一起的門戶。servlet轉發不通過模型後的彈簧重定向

在屏幕上,用戶有一個列表,他/她選擇一張信用卡以查看該卡交易的報告。作爲一種額外的安全措施,我避免將任何請求中的信用卡發送給客戶端,因此我有一張蒙面的信用卡號碼列表,以便我發送給用戶,並且在用戶發送的請求中,我收到了一份我使用的記錄ID以確定哪個信用卡正在查詢。

在控制器(ReportController),我有處理此輸入和呼叫(局部地)負責處理報告(ReportServlet)的小服務程序的方法。如果處理中有任何錯誤,應使用型號 param「error」將其返回到屏幕。這最後一部分不起作用。

如果在ReportServlet中有錯誤,它不會返回到屏幕。如果我評論前鋒線(並強制出現錯誤),它會起作用,但是在轉發之後它不會。我做錯了什麼?

下面的代碼:

ReportController

try { 
       ... 

       if (cardholders == null || cardholders.size() < 2 || id <= 0) { 
        model.put("error","there's an error"); 
        return CARDTRANSACTIONS_PATH; 
       } else { 
... 
        HttpUpdatetableRequestWrapper customRequest = new HttpUpdatetableRequestWrapper(request); 
        customRequest.setParameter("cardnumber", cardholder.getCardnumber()); 

        request.getRequestDispatcher(config.getProperty("reportservlet")).forward((HttpServletRequest) customRequest, response); 
        String error = (String) session.getAttribute("error"); 
        if(!(error == null || "".equals(error))){ 
         throw new RuntimeException(error);       
        } 
       } 
      } catch (Exception ex) { 
       model.put("error", "there's an error"); 
      } finally{ return CARDTRANSACTIONS_PATH;} 
+1

如果你要轉發,你應該從你的控制器返回'null'而不是'CARDTRANSACTIONS_PATH',我假設它是一些String。 –

回答

1

當你的控制器返回,春節會給模型的AbstractView將其分解,並移交給請求轉移的屬性。所以,當你在你的控制器中爲模型對象添加屬性時,你只是將它們添加到與請求無關的地圖中。如果您希望這些屬性可用於您轉發的資源,則應將其直接添加到請求中。

當您轉發時,您希望轉發給您的資源來處理響應,因此您應該讓您的控制器在該情況下返回null,以便它不會執行任何進一步處理。

+0

非常感謝。簡單而好的解釋。 –