簡體   English   中英

Spring 3 MVC彈簧控制器的默認視圖

[英]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接口將確定該邏輯視圖名稱。

(即您的控制器方法返回ModelMapvoid 。)

您可以實現此接口,但是我認為在您的示例中,您可以做的最好的事情就是按照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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM