2012-11-17 79 views
0

在Struts中,你經常定義Struts配置文件中的一個控制器成功和失敗的看法,如:如何在Spring MVC中創建控制器特定的視圖解析器?

<action path="/Home" type="org.sample.HomeAction"> 
<forward name="success" path="/views/Home.jsp"/> 
<forward name="failure" path="/views/Error.jsp"/> 
</action> 
<action path="/AddCustomer" type="org.sample.AddCustomerAction"> 
<forward name="success" path="/views/AddCustomer.jsp"/> 
<forward name="failure" path="/views/AddCustomerError.jsp"/> 
</action> 

如果你這樣做,同樣的邏輯視圖名稱(成功或失敗),可以解決不同的JSP取決於從哪個控制器調用它們。相比之下,在最簡單的彈簧設置中,視圖解析器是全局的。在Spring MVC中複製這種配置最簡單的方法是什麼?

我知道一種方法是使用SimpleFormController,它具有方法getFormView()和getSuccessView(),但我不希望有從該類繼承的限制。有沒有一種更一般的方法來做控制器特定的視圖分辨率?

我調查是大量的Struts代碼遷移到春天的情景。舊代碼廣泛使用「成功」和「失敗」。理想情況下,我只想使用現有的Spring視圖解析器並複製相同的配置。例如

<bean class="some.spring.view.resolver"> 
    <property> 
     <controller name="org.sample.HomeAction"> 
      <view name="success" value="/views/Home.jsp"/> 
      <view name="failure" value="/views/Error.jsp"/> 
     </controller> 
     <controller name="org.sample.AddCustomerAction"> 
      <view name="success" value="/views/AddCustomer.jsp"/> 
      <view name="failure" value="/views/AddCustomerError.jsp"/> 
     </controller>    
</bean> 

是否有支撐具有解析取決於哪個控制器它們從稱爲不同的值相同的邏輯視圖表示一個現有的彈簧的視圖解析器?或者,我是否需要自己編寫或更新邏輯視圖名稱以使其具有全局唯一性?

謝謝。

回答

0

你可以只是從你的控制器方法返回不同的視圖名稱:

@RequestMapping("/home") 
public String home() { 

    try { 
    // Some logic 

    return "home"; 
    } catch (Exception e) { 
    return "error"; 
    } 
} 

這將解決因調用控制器方法的結果適當的JSP視圖。這與返回表示action方法結果的struts2方法非常相似,您不需要額外的xml就可以將結果字符串映射到jsp視圖。

+0

你是如何建議家庭和錯誤將被解決爲實際意見?他們將如何解析爲不同的jsps,具體取決於從哪個控制器調用邏輯名稱?例如如果從主控制器調用「error」,它可能會轉到「homeError.jsp」,但如果從CustomerFormController調用「error」,它可能會轉到「customerFormError.jsp」。 – Hedley

+0

Home和錯誤將被標準的Spring視圖解析器解析爲視圖。如果你需要爲每個控制器使用不同的jsps,你只需返回一個不同的字符串。沒有必要使用家庭和錯誤。你可以使用customerformerror和homeerror等。 –

+0

你真正要做的就是將struts中保存的邏輯轉移到你的控制器方法中。我認爲這是一個巨大的進步。 –

相關問題