边工作边学习之thymeleaf避坑(一)

  工作中很少接触thymeleaf,利用工作闲余时间跟着Spring实战这本书接触到了thymeleaf。由于小董是测试转开发,所以要比别人付出更多的时间来学习啦~

今天跟着实战书训练,启动项目后访问对应路径产生了以下问题:

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Fri Aug 07 13:39:12 CST 2020

There was an unexpected error (type=Internal Server Error, status=500).

An error happened during template parsing (template: "class path resource [templates/design.html]")

org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/design.html]")

....

  起初以为是映射不到导致的,后来发现这是由于thymeleaf解析发生了问题,经过我一点点的注释部分代码启动,再注释再启动...终于找到了无法解析的部分代码:

Name your taco creation


由于该段代码使用的th:field = "*{name}",经过了解*{...}选择表达式是配合着th:object来的,是选择th:object标签中指定的实体中的属性

因为小董在

标签里这么写的:

 
  

并且在接口中,将design以如下方式传递给页面:

model.addAttribute("design", new Taco());

而Taco实体中并没有将name属性声明出来导致了此错误的产生!

@Data
public class Taco {
    private String name;
}

这样以来就解决啦!

总结一下:

1.如果th:field标签中使用了*{...}选择表达式,那么要配合着th:object来使用

2.要确保*{...}中指定的属性在th:object指定的实体中存在,正如上所述,我使用了th:field=*{name},就必须确保name属性在th:object="${design}"中指定的后端传递的Taco实体中存在(model.addAttribute("design", new Taco());

  今天的分享到这儿~希望对遇到此问题的小伙伴们会有所帮助,如果有不正确的地方或者需要补充的地方欢迎大家在评论区指正或补充,小董会定期与大家分享心得的~祝大家生活愉快 ^ ^

 

 

你可能感兴趣的:(学习心得)