我有一个简单的问题,但我无法在任何地方找到解决方案。
对于一个项目,我有一个控制器,它根据一些业务规则提取列表。我有多个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文档中找到任何此类内容。这是可能的还是整个设置错误开始?
答案 0 :(得分:0)
当没有显式提供此类逻辑视图名称时,RequestToViewNameTranslator接口确定逻辑视图名称。
(那时你的控制器方法返回Model
,Map
或void
。)
您可以实现此接口,但我认为在您的示例中,您可以做的最好的事情是定义CodeChimp建议的常量。
答案 1 :(得分:0)
你能否采用使用命令的多个视图解析器的方法?
让beanNameViewResolver的顺序为0,它会尝试将匹配的bean映射到您返回的modelAndView(在您的情况下为控制器通用)。
如果它不匹配,则可以将其默认为internalResourceViewResolver(order = 1)以提供默认行为。
答案 2 :(得分:0)
您的默认视图页面需要一些应通过Model Attribute发送的属性。假设,这些必需的模型属性在不同Business逻辑的所有方法中都是相同的。您可以将它们添加到Flash属性中并重定向到默认方法。
假设X1,X2属性在所有Handler方法中都是相同的,与Logic
无关@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中添加requires属性,因为如果刷新页面,这可以避免众所周知的异常。
谢谢