我有一个使用Thymeleaf作为模板解析器的Spring Boot应用程序,在从NetBeans调试时工作正常,但是在运行其.jar时出现此错误:
解析模板“/ theme / property”时出错,模板可能不存在,或者任何已配置的模板解析器都无法访问
应用程序设置为自动配置程序,注释为@SpringBootApplication,扩展名为SpringBootServletInitializer。我没有在属性文件中设置任何contextPath。我正在使用Thymeleaf 2.1.6和Spring 4版本。 jar是用Maven生成的。
做了一些研究我发现在某些控制器中我传递了一个双斜线,我已经解决了,但大多数页面仍无效。
此控制器有效:
@GetMapping("/{idweb}")
String frontEndHome(@PathVariable("idweb")Integer idweb, Model model){
...
return "theme/home";
将return语句设置为 return“/ theme / home”; 不起作用。我猜,因为模板解析器正在收到双斜杠(//).
此其他控制器引发错误:
@GetMapping("/{idweb}/property")
String frontEndProperty(@PathVariable("idweb") Integer idweb, @RequestParam(value = "idproperty", required = false) Integer idproperty, Model model) throws Exception {
...
return "theme/property";
索引控制器也能正常工作:
@GetMapping("/")
public String index(Model model){
...
return "index";
}
这是我的应用程序入门级:
@SpringBootApplication
public class RentalWebsApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(RentalWebsApplication.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(RentalWebsApplication.class, args);
}
}
对于Thymeleaf我没有设置任何配置,虽然我已经测试了应用程序将其设置到application.properties文件中,结果相同:
spring.thymeleaf.prefix=classpath:/templates/
所有html文件都设置为:
src/main/resources/templates
示例中的html文件位于:
src/main/resources/templates/index.html
src/main/resources/templates/theme/home.html
src/main/resources/templates/theme/property.html
还有一些其他问题涉及同一问题,但没有一个问题对我有用。任何帮助,将不胜感激。
更新
将jar部署到Pivotal Web Services中,整个网站运行良好,但没有使用Boxfuse,Heroku或在本地运行jar。因此,我猜问题的根源是一些错误的配置,Pivotal系统检测并纠正。*
* PWS未纠正配置问题。它在运行应用程序之前解压缩你的jar文件,这会阻止双斜杠导致问题。 - Andy Wilkinson
答案 0 :(得分:5)
最后,解决方案与双斜杠相关,如果我们在开头设置带斜杠的return语句,classpath:/templates/
会得到:
return "/theme/property"
而不是:
return "theme/property"
在我的情况下,问题不是在控制器上,而是在带有Thymeleaf片段引用的html中,就像在这个例子中一样:
<footer th:replace="/index::footer"></footer>
而不是:
<footer th:replace="index::footer"></footer>
我不明白为什么IDE(NetBeans和STS)不会引起错误。
答案 1 :(得分:0)
从application.properties中删除spring.thymeleaf.prefix = classpath:/ templates /。
答案 2 :(得分:0)
使用
' joined DataTable columns
Dim JoinedDT As New DataTable
JoinedDT.Columns.Add("ID", GetType(Integer))
JoinedDT.Columns.Add("Name", GetType(String))
JoinedDT.Columns.Add("YearOfBirth", GetType(Integer))
' other stuff
Dim query As IEnumerable(Of DataRow) = (From dr1 In Dt1.AsEnumerable() _
Group Join dr2 In Dt2.AsEnumerable() _
On dr1.Field(Of Integer)("ID") Equals dr2.Field(Of Integer)("ID") _
Into joined = Group _
From j In joined.DefaultIfEmpty() _
Select New With
{
.ID = dr1.Field(Of Integer)("ID"),
.Name = dr1.Field(Of String)("Name"),
.YearOfBirth = If(j IsNot Nothing, j.Field(Of Integer)("YearOfBirth"), 0)
}).Select(Function(r)
' use `DataTable.NewRow` here
Dim row As DataRow = JoinedDT.NewRow()
row("ID") = r.ID
row("Name") = r.Name
row("YearOfBirth") = r.YearOfBirth
Return row
End Function)
Dt3 = query.CopyToDataTable()
而不是
public int countPixels(Colour colour) {
int count = 0;
//Colour c1 = Colour.WHITE.getTexture();
//Colour c2 = Colour.BLACK.getTexture();
return count;
}