网站建设思路方法,响应式网站要怎么做,微信公众平台开发商,小型网站建设源码概述
Thymeleaf提供了一组Spring集成#xff0c;使您可以将其用作Spring MVC应用程序中JSP的全功能替代品。
这些集成将使您能够#xff1a;
Controller像使用JSP一样#xff0c;将Spring MVC 对象中的映射方法转发到Thymeleaf管理的模板。在模板中使用Spring表达式语言使您可以将其用作Spring MVC应用程序中JSP的全功能替代品。
这些集成将使您能够
Controller像使用JSP一样将Spring MVC 对象中的映射方法转发到Thymeleaf管理的模板。在模板中使用Spring表达式语言Spring EL代替OGNL。在与表单支持Bean和结果绑定完全集成的模板中创建表单包括使用属性编辑器转换服务和验证错误处理。显示Spring管理的消息文件中的国际化消息通过常规MessageSource对象。使用Spring自己的资源解析机制解析您的模板。
thymeleaf自己也做了spring的集成所以我们并不需要做太多的配置就可以达到我们想要的结果。thymeleaf提供了两种集成方法①、注解配置也就是java代码②、xml文件配配置本文主要介绍第二种xml配置。
你能get到的知识点 1、springmvc整合thymeleaf
2、spring提供的三种model的使用
3、解决html前端thymeleaf不生效问题见问题1
4、解决html前端显示乱码问题见问题2 springmvc整合thymeleaf 一加入依赖
在springmvc里面除了要加入 thymeleaf的主依赖之外还需要 thymeleaf-spring4否则会报 org.thymeleaf.spring4.view.ThymeleafViewResolver找不到thymeleaf解析器所以 thymeleaf-spring4也是必不可少的。 Thymeleaf具有针对Spring Framework 3.x和4.x的集成由两个独立的库分别称为thymeleaf-spring3和提供thymeleaf-spring4。这些库打包在单独的.jar文件thymeleaf-spring3-{version}.jar和thymeleaf-spring4-{version}.jar中需要添加到类路径中以便在应用程序中使用Thymeleaf的Spring集成 !-- thymeleaf--dependencygroupIdorg.thymeleaf/groupIdartifactIdthymeleaf-spring4/artifactIdversion3.0.11.RELEASE/version/dependencydependencygroupIdorg.thymeleaf/groupIdartifactIdthymeleaf/artifactIdversion3.0.11.RELEASE/version/dependency
复制
在springmvc配置文件中配置thymeleaf解析器官方文档中Thymeleaf提供了上述两个接口的实现 org.thymeleaf.spring4.view.ThymeleafVieworg.thymeleaf.spring4.view.ThymeleafViewResolver
复制
不过现在都已经被 org.thymeleaf.spring4.view.ThymeleafViewResolver所代替至于以上配置是否还能够生效就要靠你来试试了。 !-- thymeleaf 模板解析器 --bean idtemplateResolver classorg.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolverproperty nameprefix value/ /property namesuffix value.html /property nametemplateMode valueHTML /property namecacheable valuefalse /property namecharacterEncoding valueUTF-8//beanbean idtemplateEngine classorg.thymeleaf.spring4.SpringTemplateEngineproperty nametemplateResolver reftemplateResolver //bean!-- 视图解析器--bean idviewResolver classorg.thymeleaf.spring4.view.ThymeleafViewResolverproperty nametemplateEngine reftemplateEngine /property namecharacterEncoding valueUTF-8//bean
复制
ViewResolvers是负责获取特定操作和语言环境的View对象的对象。通常控制器要求ViewResolvers转发到具有特定名称的视图由controller方法返回的String然后应用程序中的所有视图解析器将按有序链执行直到其中一个能够解析该视图为止。如果返回了View对象并且将控件传递给该对象以呈现HTML。
注值得注意的是如果自己设置了spring的视图解析器需要将其注释掉否则thymeleaf解析器可能不会生效我就是因为这个调试了好久最后才发现这个问题。
!-- 配置视图解析器 prefix前缀 suffix后缀 使用thymeleaf需要将其注释掉--bean classorg.springframework.web.servlet.view.InternalResourceViewResolverproperty nameprefix value//property namesuffix value.html//bean
复制
三
编写控制器
需要从控制层传数据到视图时我们就会使用model常用的三种model就是Model、ModelMap、ModelAndView。使用这三种model时spring框架自动创建实例并作为controller的入参用户无需自己创建
1、使用Model
/*** 在Model里存入一个用户信息* return hello页面*/GetMapping(returnModelAndView)public String returnModelAndView(Model model){model.addAttribute(userInfo,new UserInfo(lomtom,123,new Address(湖南,邵阳)));return hello;}
复制
Model是一个接口 Model源码
public interface Model {Model addAttribute(String var1, Object var2);Model addAttribute(Object var1);Model addAllAttributes(Collection? var1);Model addAllAttributes(MapString, ? var1);Model mergeAttributes(MapString, ? var1);boolean containsAttribute(String var1);MapString, Object asMap();
}
复制
2、使用ModelMap
ModelMap继承LinkedHashMap
ModelMap源码
public class ModelMap extends LinkedHashMapString, Object {public ModelMap() {}public ModelMap(String attributeName, Object attributeValue) {this.addAttribute(attributeName, attributeValue);}public ModelMap(Object attributeValue) {this.addAttribute(attributeValue);}public ModelMap addAttribute(String attributeName, Object attributeValue) {Assert.notNull(attributeName, Model attribute name must not be null);this.put(attributeName, attributeValue);return this;}public ModelMap addAttribute(Object attributeValue) {Assert.notNull(attributeValue, Model object must not be null);return attributeValue instanceof Collection ((Collection)attributeValue).isEmpty() ? this : this.addAttribute(Conventions.getVariableName(attributeValue), attributeValue);}public ModelMap addAllAttributes(Collection? attributeValues) {if (attributeValues ! null) {Iterator var2 attributeValues.iterator();while(var2.hasNext()) {Object attributeValue var2.next();this.addAttribute(attributeValue);}}return this;}public ModelMap addAllAttributes(MapString, ? attributes) {if (attributes ! null) {this.putAll(attributes);}return this;}public ModelMap mergeAttributes(MapString, ? attributes) {if (attributes ! null) {Iterator var2 attributes.entrySet().iterator();while(var2.hasNext()) {EntryString, ? entry (Entry)var2.next();String key (String)entry.getKey();if (!this.containsKey(key)) {this.put(key, entry.getValue());}}}return this;}public boolean containsAttribute(String attributeName) {return this.containsKey(attributeName);}
}
复制
3、使用ModelAndView
/*** 在ModelAndView里存入一个用户信息* return ModelAndView*/GetMapping(returnModelAndView)public ModelAndView returnModelAndView(ModelAndView modelAndView){modelAndView.setViewName(hello);modelAndView.addObject(userInfo,new UserInfo(lomtom,123,new Address(湖南,邵阳)));return modelAndView;}
复制
ModelAndView顾名思义就是模型和试图的结合。ModelAndView源码
public class ModelAndView {private Object view;private ModelMap model;private HttpStatus status;private boolean cleared false;......
}
复制
四编写html
首先写一个链接请求 returnModelAndView请求。
a hrefreturnModelAndViewModelAndView/a
复制
然后写hello.html页面用于验证
h2你好啊你成功了/h2
p th:text${userInfo.userName}来自${userInfo.address.province}${userInfo.address.city}/p
复制
五结果 六记录我遇到的问题
问题1配置好一切后thymeleaf无法解析所有关于thymeleaf的显示都无法生效。解决由于我配置了spring的视图解析所以导致thymeleaf的试图解析无法生效所以去掉spring的视图解析。 thmelaf介绍Springmvc的视图解析快速浏览其属性足以了解其配置方式 viewClass建立View实例的类。对于JSP解析器这是必需的但是当我们与Thymeleaf合作时根本不需要。prefix与suffixThymeleaf的TemplateResolver对象中相同名称的属性的工作方式相似。order 确定在链中查询ViewResolver的顺序。viewNames 允许使用此ViewResolver解析视图名称带通配符。
问题2前端显示乱码具体表现为后台传入的不乱码但是html中原本存在的乱码。解决在试图解析器和模板解析器中加入参数propertynamecharacterEncodingvalueUTF-8/