2014-01-06 37 views
1

我有一個簡單的問題,但我無法在任何地方找到解決方案。Spring 3 MVC彈簧控制器的默認視圖

對於一個項目,我有一個控制器,根據一些業務規則拉列表。我有多個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"; 
} 

我無法找到任何這樣的東西在春天的文檔。這是可能的還是整個設置錯誤開始?

+0

我不相信這是可以做到的。您可能需要考慮製作一個'static final String DEFAULT_VIEW =「view」',這樣您就不會重複字符串「視圖」,並且有一個編輯點。在大多數情況下,我個人並不是這個迷,但在這裏似乎很合適。 – CodeChimp

回答

0

按照Sping Reference

RequestToViewNameTranslator接口的功能確定當沒有這樣的邏輯視圖名稱顯式提供的邏輯視圖名。

(也就是說當你的控制器方法返回ModelMapvoid。)

你可以實現這個接口,但是我覺得在你的榜樣,你所能做的就是定義一個常數CodeChimp擁有的最好的東西建議。

+0

我很害怕那個。我將研究自定義的RequestToViewNameTranslator與自定義註釋相結合,以保持乾淨。 –

0

難道你不能使用多個視圖解析器使用順序的方法?

讓beanNameViewResolver的順序爲0,它嘗試將匹配的bean映射到您返回的modelAndView(對於您的控件的公共控件)。

如果它不匹配,則可以將其默認設置爲internalResourceViewResolver(order = 1)以提供默認行爲。

0

您的默認視圖頁面需要通過模型屬性發送的一些屬性。假設這些必需的模型屬性在所有不同業務邏輯的方法中都是相同的。您可以將它們添加到Flash屬性中並重定向到默認方法。

假設X1,X2的屬性在所有的處理方法是相同的獨立邏輯

@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"; 
    } 

} 

注意:您必須添加需要還因爲如果你刷新頁面,這避免了衆所周知的例外在會話屬性。

謝謝