簡體   English   中英

如何在Spring MVC中將JSP作為具有不同請求映射的視圖重用? 沒有模板

[英]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.

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