thymeleaf spring boot templates子文件夹中的视图

时间:2017-03-03 11:31:53

标签: spring spring-mvc spring-boot thymeleaf

我在春季靴子里使用百里香,有几种观点。我不希望将所有视图保留在默认情况下src / main / resources / templates的同一文件夹中。

是否可以移动src / main / resources / templates / folder1中的某些视图,我将传递" folder1 / viewname "访问该页面?

当我尝试http://localhost:8080/folder1/layout1时,它没有在src / main / resources / templates / folder1 /中找到我的html,但是当我在模板主文件夹src / main / resources / templates /中移动html时,http://localhost:8080/layout1工作正常。

我的控制器类看起来像:

@RequestMapping(value = "{pagename}", method = RequestMethod.GET)
public String mf42_layout1(@PathVariable String pagename) {
    return pagename;
}

所以,我想如果我通过layout1,它将在模板中查找,如果我说" a / layout1",它将在/ layout文件夹中查找

谢谢, 和Manish

2 个答案:

答案 0 :(得分:8)

基本上,您的请求映射和视图名称是分离的,您只需要注意语法。

例如,使用

@RequestMapping(value = "/foobar", method = RequestMethod.GET)
public String mf42_layout1() {
    return "layout1";
}

http://localhost:8080/foobar的请求将呈现位于src/main/resources/templates/layout1.html的模板。

如果您将模板放在子文件夹上,只要您提供了正确的视图路径,它也会有效:

@RequestMapping(value = "/foobar", method = RequestMethod.GET)
public String mf42_layout1() {
    return "a/layout1";
}

http://localhost:8080/foobar的请求会将模板呈现在src/main/resources/templates/a/layout1.html

您还可以使用@PathVariable参数化网址端点:

@RequestMapping(value = "/foobar/{layout}", method = RequestMethod.GET)
    public String mf42_layout1(@PathVariable(value = "layout") String layout) { // I prefer binding to the variable name explicitely
        return "a/" + layout;
    }

现在,http://localhost:8080/foobar/layout1的请求会在src/main/resources/templates/a/layout1.html中呈现模板,而http://localhost:8080/foobar/layout2的请求会呈现src/main/resources/templates/a/layout2.html中的内容

但要注意正斜杠充当URL中的分隔符,因此对于您的控制器:

@RequestMapping(value = "{pagename}", method = RequestMethod.GET)
public String mf42_layout1(@PathVariable String pagename) {
    return pagename;
}

我的猜测是当您点击http://localhost:8080/a/layout1 pagename“没有捕获“和”layout1“。因此控制器可能会尝试呈现src/main/resources/templates/a.html的内容

Spring MVC reference广泛地描述了如何映射请求,您应该仔细阅读。

答案 1 :(得分:0)

在 Linux 服务器中运行应用程序时,我遇到了类似的模板未找到问题。我使用路径作为“返回“/a/layout1”。这在本地Windows PC中工作正常,但我必须删除起始“/”才能使其在Linux机器中工作(即“返回“a/layout1 ").