spring mvc 整合 thymeleaf 使用java配置实现

spring mvc 整个 thymeleaf小demo

项目地址:https://github.com/wkcaeser/springThymeleaf
http://download.csdn.net/download/qq_36666651/10141120

先附上依赖(主要为后面几个包):

group 'springThymeleaf'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'war'

sourceCompatibility = 1.8

def tomcatVersion = "9.0.0.M21"
def jstlVersion = "1.2"
def springVersion = "4.3.8.RELEASE"
def mybatisVersion = "3.4.4"
def mybatisSpringVersion = "1.3.1"
def mysqlConnectorVersion = "6.0.6"
def dbcpVersion = "2.1.1"
def log4jVersion = "2.10.0"
def gsonVersion = "2.8.1"
def jjwtVersion = "0.7.0"
def fileupload = "1.3.3"
def commonsIo = "2.2"

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'

    compile "org.apache.tomcat:tomcat-servlet-api:$tomcatVersion"
    compile "org.apache.tomcat:tomcat-jsp-api:$tomcatVersion"
    compile "javax.servlet:jstl:$jstlVersion"
    compile "org.springframework:spring-webmvc:$springVersion"
    compile "org.springframework:spring-jdbc:$springVersion"
    compile "org.mybatis:mybatis:$mybatisVersion"
    compile "org.mybatis:mybatis-spring:$mybatisSpringVersion"
    compile "mysql:mysql-connector-java:$mysqlConnectorVersion"
    compile "org.apache.commons:commons-dbcp2:$dbcpVersion"
    compile "org.apache.logging.log4j:log4j-core:$log4jVersion"
    compile "com.google.code.gson:gson:$gsonVersion"
    compile "io.jsonwebtoken:jjwt:$jjwtVersion"
    compile "commons-io:commons-io:$commonsIo"
    compile "commons-fileupload:commons-fileupload:$fileupload"

    compile "org.apache.tiles:tiles-jsp:3.0.8"

    // https://mvnrepository.com/artifact/javax.validation/validation-api
    compile group: 'javax.validation', name: 'validation-api', version: '2.0.0.Final'
    // https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator
    compile group: 'org.hibernate.validator', name: 'hibernate-validator', version: '6.0.5.Final'
    // https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12
    compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.25'

    // https://mvnrepository.com/artifact/javax.mail/javax.mail-api
    compile group: 'javax.mail', name: 'javax.mail-api', version: '1.6.0'
    // https://mvnrepository.com/artifact/org.apache.geronimo.specs/geronimo-activation_1.1_spec
    compile group: 'org.apache.geronimo.specs', name: 'geronimo-activation_1.1_spec', version: '1.1'
    // https://mvnrepository.com/artifact/org.attoparser/attoparser
    compile group: 'org.attoparser', name: 'attoparser', version: '2.0.4.RELEASE'
    // https://mvnrepository.com/artifact/org.unbescape/unbescape
    compile group: 'org.unbescape', name: 'unbescape', version: '1.1.5.RELEASE'
    // https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf-spring4
    compile group: 'org.thymeleaf', name: 'thymeleaf-spring4', version: '3.0.9.RELEASE'


}

首先配置模板解析器,代码如下:

//模板解析器
    @Bean
    public ITemplateResolver templateResolver(){
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
//        WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
//        ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(webApplicationContext.getServletContext());
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setPrefix("/WEB-INF/thymeleaf/");
        templateResolver.setSuffix(".html");
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setCacheable(false);
        return templateResolver;
    }

注释部分也是一种配置方法,这里需要注意的是返回的接口不同的版本有些区别,低版本的为TemplateResolver,最新版本的接口ITemplateResolve。

然后配置模板引擎,代码如下:

//模板引擎
    @Bean
    public TemplateEngine templateEngine(ITemplateResolver templateResolver){
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver);
        return templateEngine;
    }

最后配置Thymeleaf视图解析器:

//thymeleaf视图解析器
    @Bean
    public ViewResolver viewResolver(TemplateEngine templateEngine){
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(templateEngine);
        return viewResolver;
    }

配置到这里就完成了。
下面为一个注册小demo案例:
控制器部分:

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import javax.validation.Valid;

@Controller
public class MainController {
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String index(Model model){
        model.addAttribute(new User());
        return "home";
    }

    @RequestMapping(value = "/register", method = RequestMethod.GET)
    public String register(@Valid User user, Errors errors, Model model){
        model.addAttribute(user);
        System.out.println(user);
        if(errors.hasErrors()){
            return "home";
        }

        return "redirect:/";
    }
}

User实体类:

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class User {

    @NotNull
    @Size(min = 5, max = 10)
    private String username;

    @NotNull
    @Size(min = 5, max = 10)
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

html页面部分:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org"><!-- 声明Thymeleaf的命名空间 -->
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        .errorStyle{
            background-color: red;
        }
    </style>
</head>
<body>

<form method="get" th:object="${user}" th:action="register">
    <lable th:class="${#fields.hasErrors('username')}? 'errorStyle'">username:</lable>
    <input type="text" th:field="*{username}" th:class="${#fields.hasErrors('username')}? 'errorStyle'"/><br>
    <lable th:class="${#fields.hasErrors('password')}? 'errorStyle'">username:</lable>
    <input type="text" th:field="*{password}" th:class="${#fields.hasErrors('password')}? 'errorStyle'"/><br>
    <input type="submit" value="register">
</form>
</body>
</html>

th:class会渲染成html标签的class,th:field会渲染成input的value属性,${}为SpEL表达式,*{}为选择表达式,选择表达式的计算方式为基于整个SpELl上下文计算,form标签中的th:object绑定了model中的user对象,那么这个解析就是user的属性。

这个demo的意思就是注册框输入不合法的话会返回注册界面并将注册信息回显,不符合约束要求的字段会被标红。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值