[英]Spring 3 MVC Default view for spring controller
我有一個簡單的問題,但是在任何地方都找不到解決方案。
對於一個項目,我有一個控制器,該控制器根據一些業務規則提取列表。 我有多個RequestMappings和多個方法,但它們都應返回相同的視圖。 有沒有辦法為控制器指定默認視圖? 目前,我的代碼如下所示:
@Controller
public class OverviewController {
@RequestMapping("/{name}-games")
public String getOverview(@PathVariable("name") String name) {
// Code
return "view";
}
@RequestMapping("/{category}")
public String getCategory(@PathVariable("category") String category) {
// Code
return "view";
}
@RequestMapping("/special-{promo}-games")
public String getSpecialPromo(@PathVariable("promo") String namepromo) {
// Code
return "view";
}
}
我可以替換return "view";
像return view();
到處都是,但我希望找到更像注解的內容:
@DefaultView()
public String view() {
return "view";
}
我在spring文檔中找不到任何此類的東西。 這是可能的,還是整個設置都不正確?
根據Sping參考 ,
如果未明確提供邏輯視圖名稱,則RequestToViewNameTranslator接口將確定該邏輯視圖名稱。
(即您的控制器方法返回Model
, Map
或void
。)
您可以實現此接口,但是我認為在您的示例中,您可以做的最好的事情就是按照CodeChimp的建議定義一個常量。
您是否可以采用使用訂單使用多個視圖解析器的方法?
讓beanNameViewResolver的順序為0,它嘗試將匹配的bean映射到您返回的modelAndView(在您的情況下,通常用於控制器)。
如果不匹配,則可以將其默認設置為internalResourceViewResolver(order = 1)以提供默認行為。
您的默認視圖頁面需要一些應通過“模型屬性”發送的屬性。假設,在所有具有不同業務邏輯的方法中,這些必需的模型屬性都是相同的。您可以將其添加到Flash屬性中,然后重定向到默認方法。
假設X1,X2屬性在所有獨立於Logic的Handler方法中都是相同的
@Controller
@SessionAttribute({"X1","X2"})
public class OverviewController {
@RequestMapping("/{name}-games")
public String getOverview(@PathVariable("name") String name,final RedirectAttributes redirectAttributes) {
// Code
//add attributes requires for view in Flash attribute
redirectAttributes.addFlashAttribute("X1", "X1");
redirectAttributes.addFlashAttribute("X2", "X2");
return "redirect:defaultview";
}
@RequestMapping("/{category}")
public String getCategory(@PathVariable("category") String category,final RedirectAttributes redirectAttributes) {
// Code
//add attributes requires for view in Flash attribute
redirectAttributes.addFlashAttribute("X1", "X1");
redirectAttributes.addFlashAttribute("X2", "X2");
return "redirect:defaultview";
}
@RequestMapping("/special-{promo}-games")
public String getSpecialPromo(@PathVariable("promo") String namepromo,final RedirectAttributes redirectAttributes) {
// Code
//add attributes requires for view in Flash attribute
redirectAttributes.addFlashAttribute("X1", "X1");
redirectAttributes.addFlashAttribute("X2", "X2");
return "redirect:defaultview";
}
@RequestMapping("defaultview")
public String default(Model model) {
//here you can access all attributes in Flash Map via Model Attribute
// Code
model.addAttribute("X1","X1");
model.addAttribute("X1","X1");
return "view";
}
}
警告:您還必須在Session中添加require屬性,因為如果刷新頁面,這可以避免眾所周知的Exception。
謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.