[英]How to reuse a JSP as view with different request mapping in Spring MVC? Not templating
假設我在WEB-INF中具有以下文件夾結構:
WEB-INF
- jsp
- foo
+ bar.jsp
我有一個視圖解析器:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
bar.jsp具有以下內容:
<!DOCTYPE html>
<html lang="en">
<head> ... </head>
<body>
Hello ${name}
</body>
</html>
我有一個像這樣的控制器:
@Controller
@RequestMapping("/foo")
public class MyController {
@RequestMapping("/bar.html")
public void showBar(Model model) {
model.addAttribute("name", "Luiggi");
}
}
現在,我想在同一控制器中重用bar.jsp,但使用不同的請求映射,如下所示:
@Controller
@RequestMapping("/foo")
public class MyController {
@RequestMapping("/bar.html")
public void showBar(Model model) {
model.addAttribute("name", "Luiggi");
}
@RequestMapping("/quo.html")
public String showQuo(Model model) {
model.addAttribute("name", "Thomas");
return "bar";
}
}
上述方法將失敗,因為Spring MVC將在根目錄(即WEB-INF / jsp內)搜索bar.jsp
。 我想要/需要重用bar.jsp,因為我基本上使用相同的內容,只是使用不同的數據填充屬性。
目前,我知道一個非常不靈活的解決方案,即返回bar.jsp的整個路徑:
@RequestMapping("/quo.html")
public String showQuo(Model model) {
model.addAttribute("name", "Thomas");
return "foo/bar";
}
還有其他方法可以做到這一點嗎?
注意:這不是模板。 我只想對具有不同URL的兩個視圖使用相同的JSP資源,如示例中所示。
您可以使用UrlFilenameViewController
簡單的Controller實現,將URL的虛擬路徑轉換為視圖名稱並返回該視圖。
以下博客文章 ,很好地列出了所有配置細節。 由於您需要模型,因此我添加了一個示例性子類,該子類應為您提供足夠的起點
@Controller
public class DynamicViewController extends UrlFilenameViewController
{
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) {
return new ModelAndView(this.getViewNameForRequest(request));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.