视图控制层代码demo如下:
@Controller @RequestMapping("/") public class MessageController { private final MessageRepository messageRepository; @Autowired public MessageController(MessageRepository messageRepository) { this.messageRepository = messageRepository; } @RequestMapping public ModelAndView list() { Iterable<Message> messages = this.messageRepository.findAll(); return new ModelAndView("messages/list", "messages", messages); } @RequestMapping("{id}") public ModelAndView view(@PathVariable("id") Message message) { return new ModelAndView("messages/view", "message", message); } @RequestMapping(params = "form", method = RequestMethod.GET) public String createForm(@ModelAttribute Message message) { return "messages/form"; } @RequestMapping(method = RequestMethod.POST) public ModelAndView create(@Valid Message message, BindingResult result, RedirectAttributes redirect) { if (result.hasErrors()) { return new ModelAndView("messages/form", "formErrors", result.getAllErrors()); } message = this.messageRepository.save(message); redirect.addFlashAttribute("globalMessage", "Successfully created a new message"); return new ModelAndView("redirect:/{message.id}", "message.id", message.getId()); } @RequestMapping("foo") public String foo() { throw new RuntimeException("Expected exception in controller"); } }
注:@Controller:1:spring的控制层。2:spring的注解之一放在类名之前3:spring配置文件中如果配置了扫描包路径,自动检测该注释的类并注入。4:spring控制层可以接收请求,并且返回响应。
@RequestMapping:用户请求路径是http://localhost:8080/项目名/类的@RequestMapping的value值/方法的@RequestMapping的value值。
@Autowired:依赖注入。
@PathVariable:rest访问方式获取参数传递
ModelAndView:一次性返回model和view2个对象,有7个构造函数,用来设定返回对象和视图,也可以用set方法设置。
@ModelAttribute:获取页面传递参数。也可以这样用
@ModelAttribute("user") public User addAccount() { return new User("jz","123"); } @RequestMapping(value = "/helloWorld") public String helloWorld(@ModelAttribute("user") User user) { user.setUserName("jizhou"); return "helloWorld"; }
@SessionAttributes("user")用户同上只是使用范围不同而已。
RedirectAttributes:我的理解是controller控制层跳转到控制层传递参数用的。
@Valid:对实体类的一个验证。验证符合jpa的标准。要和BindingResult result配合使用,如果验证不通过的话,result.hasErrors(),跳转 。如一个实体类标准:
import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import org.hibernate.validator.constraints.NotBlank; public class User { private String username; private String password; private int age; @NotBlank(message="用户名不能为空") public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @NotNull(message="密码不能为null") public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Min(value=10, message="年龄的最小值为10") public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
最后个方法就是抛出页面异常.
html主要用ThyMeleaf标签,Thymeleaf是一个XML/XHTML/HTML5模板引擎,可用于Web与非Web环境中的应用开发。它是一个开源的Java库,基于Apache License 2.0许可,由Daniel Fernández创建,该作者还是Java加密库Jasypt的作者。
form.html代码如下:
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout" layout:decorator="layout"> <head> <title>Messages : Create</title> </head> <body> <h1 layout:fragment="header">Messages : Create</h1> <div layout:fragment="content" class="container"> <form id="messageForm" th:action="@{/(form)}" th:object="${message}" action="#" method="post"> <div th:if="${#fields.hasErrors('*')}" class="alert alert-error"> <p th:each="error : ${#fields.errors('*')}" th:text="${error}"> Validation error </p> </div> <div class="pull-right"> <a th:href="@{/}" href="messages.html"> Messages </a> </div> <label for="summary">Summary</label> <input type="text" th:field="*{summary}" th:class="${#fields.hasErrors('summary')} ? 'field-error'"/> <label for="text">Message</label> <textarea th:field="*{text}" th:class="${#fields.hasErrors('text')} ? 'field-error'"></textarea> <div class="form-actions"> <input type="submit" value="Create"/> </div> </form> </div> </body> </html>
list.html代码如下:
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout" layout:decorator="layout"> <head> <title>Messages : View all</title> </head> <body> <h1 layout:fragment="header">Messages : View all</h1> <div layout:fragment="content" class="container"> <div class="pull-right"> <a href="form.html" th:href="@{/(form)}">Create Message</a> </div> <table class="table table-bordered table-striped"> <thead> <tr> <td>ID</td> <td>Created</td> <td>Summary</td> </tr> </thead> <tbody> <tr th:if="${messages.empty}"> <td colspan="3"> No messages </td> </tr> <tr th:each="message : ${messages}"> <td th:text="${message.id}">1</td> <td th:text="${#calendars.format(message.created)}"> July 11, 2012 2:17:16 PM CDT </td> <td> <a href="view.html" th:href="@{'/' + ${message.id}}" th:text="${message.summary}"> The summary </a> </td> </tr> </tbody> </table> </div> </body> </html>
view.html代码如下:
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout" layout:decorator="layout"> <head> <title>Messages : View</title> </head> <body> <h1 layout:fragment="header">Messages : Create</h1> <div layout:fragment="content" class="container"> <div class="alert alert-success" th:if="${globalMessage}" th:text="${globalMessage}"> Some Success message </div> <div class="pull-right"> <a th:href="@{/}" href="list.html"> Messages </a> </div> <dl> <dt>ID</dt> <dd id="id" th:text="${message.id}">123</dd> <dt>Date</dt> <dd id="created" th:text="${#calendars.format(message.created)}"> July 11, 2012 2:17:16 PM CDT </dd> <dt>Summary</dt> <dd id="summary" th:text="${message.summary}"> A short summary... </dd> <dt>Message</dt> <dd id="text" th:text="${message.text}"> A detailed message that is longer than the summary. </dd> </dl> </div> </body> </html>
注th标签的引用就是首先要注入标签头,xmlns:th="http://www.thymeleaf.org"放入html标签内就可以了,
# 代表 获取对象 从 messages bundle 也就是消息的资源本地化文件
$ 表示从model里面获取
<div class="col-sm-9"> <input type="text" th:field="*{id}" placeholder="Order Id" class="col-xs-10 col-sm-5" /> <p style="color:red" th:if="${#fields.hasErrors('*{id}')}" th:errors="*{id}"></p> </div>
th:fragment=“public” 相当于 include标签
th:each="user : ${users}" 相当于c:foreach 使用时候
如上面
<tr th:each="user : ${users}">
<td th:text="${user.id}">01</td>
<td th:text="${user.name}">朱遇平</td>
<td th:text="${user.xx}">java</td>
<td th:text="${user.xx}">程序员</td>
</tr>
th:href="@{/}"动态设置url参数
<form action="#" th:action="@{/users/add}" th:object="${myuser}" method="post">
这里th:Object表示表单与 改myuser注入的实体映射,
在表单 th:field="*{id} 则表示 该表单的值 与 myuser的id绑定
th:if="${#fields.hasErrors('*')}"
th:if
=
"${#strings.isEmpty(status)}"
${not #strings.isEmpty(status)}
if判断显示。
<div class="col-sm-9"> <input type="text" th:field="*{id}" placeholder="Order Id" class="col-xs-10 col-sm-5" /> <p style="color:red" th:if="${#fields.hasErrors('*{id}')}" th:errors="*{id}"></p> </div>
th:errors错误信息显示如上图。
相关推荐
标题中的"spring-boot-web.zip"可能是一个包含Spring Boot Web项目的压缩包,这个项目通常包含了用于构建Web应用程序的所有必要组件,如Spring MVC、Thymeleaf或FreeMarker模板引擎等。这些组件使得开发者能够轻松地...
- **视图解析**:虽然Spring Boot更推荐使用Thymeleaf、Freemarker等模板引擎,但也可以支持JSP。 - **配置JSP**:由于Spring Boot默认不启用JSP支持,需要额外配置,包括添加Jasper编译器和设置视图解析器。 这...
在 "spring-boot-thymeleaf DEMO" 中,我们将看到如何将 Spring Boot 和 Thymeleaf 整合到一起,构建一个动态网页应用。首先,你需要在项目中添加 Thymeleaf 的依赖,这通常在 `pom.xml` 或 `build.gradle` 文件中...
此外,Spring Boot Thymeleaf Starter 进一步简化了集成过程,使得在 Spring Boot 项目中使用 Thymeleaf 变得非常容易。 #### 环境搭建与使用示例 ##### 依赖引入 要在 Spring Boot 项目中使用 Thymeleaf,首先...
Spring Boot、Bootstrap和Thymeleaf是现代Web开发中常用的技术栈,它们分别在不同的层面上解决了开发效率和用户体验的问题。下面将详细解释这三个技术及其整合应用。 **Spring Boot** Spring Boot是由Pivotal团队...
在这个"spring-boot-thymeleaf"的例子中,我们将探讨如何结合Spring Boot和Thymeleaf模板引擎来构建Web应用程序。 Thymeleaf 是一个现代服务器端Java模板引擎,特别适合用于构建Web应用的HTML视图层。它支持静态和...
spring boot 、spring-mvc 、mybatis-plus 、mysql、redis 、elasticsearch、thymeleaf、vue、element-ui 开发环境 软件工具 JDK: 1.8 Maven: 3.3+ MySql: 5.6+ 安装教程 Redis: 4.0+ 安装教程 elasticSearch 7.x ...
【标题】: "毕业设计-基于Spring-Boot的健身房管理系统设计" ...这个项目对于学习Spring Boot和Web开发的学生来说,是一个很好的实践机会,能够全面锻炼他们的编程技能、项目管理能力和团队协作能力。
【标题】"xiaomai-hub-boot_jpa_thymeleaf-master.zip" 涉及的是一个基于Java的Web开发项目,使用了Spring Boot、JPA(Java Persistence API)和Thymeleaf模板引擎。该项目可能是一个开源或者个人学习项目,以...
<artifactId>spring-boot-starter-web ``` ##### 3. 编写 Spring Boot 引导类 引导类是 Spring Boot 应用的核心入口点。通常使用 `@SpringBootApplication` 注解来标识该类。 ```java package com.itheima; ...
总之,这个压缩包提供了一个完整的SpringBoot项目示例,涵盖了SpringBoot的基本使用、Thymeleaf模板引擎的应用、Semantic UI的前端界面设计,以及Spring Data JPA的数据持久化操作。学习并理解这些内容,对于构建...
<artifactId>spring-boot-starter-web ``` 接下来,创建一个简单的Thymeleaf模板。在`src/main/resources/templates`目录下,创建一个名为`index.html`的文件,内容可能如下: ```html <!DOCTYPE html> ...
- 使用`spring-boot-starter-web`起步依赖,它包含了处理HTTP请求和响应的能力,使得我们可以轻松地部署Web应用。 2. **Kendo UI Menu组件** - Kendo UI的Menu组件是一个可自定义的导航结构,可以用于构建层次化...
在本项目中,我们利用Spring Boot、Thymeleaf和Bootstrap三大技术栈构建了一个简易的后台管理系统界面。Spring Boot作为现代化的Java应用开发框架,极大地简化了配置和启动流程,而Thymeleaf则是一个现代的服务器端...
通过以上步骤,我们已经成功地构建了一个使用Spring Boot和Thymeleaf的简单Web应用。Thymeleaf的表达式语言允许我们在HTML中直接使用Java对象,极大地简化了前端与后端的数据交互。在实际开发中,你可以进一步探索...
<artifactId>spring-boot-starter-web <groupId>org.projectlombok <artifactId>lombok <optional>true <groupId>org.springframework.boot <artifactId>spring-boot-starter-test <scope>test <!...
2. **起步依赖(Starter)**:Spring Boot 的一大特色就是通过starter-pom来管理依赖,比如 spring-boot-starter-web 用于Web开发,spring-boot-starter-data-jpa 用于数据库操作等。这些起步依赖包含了大部分我们...
在本项目中,我们结合了Spring Boot、Mybatis-Plus、Thymeleaf以及Bootstrap来实现一个具有分页查询功能的Web应用。首先,让我们详细探讨每个技术在项目中的作用和实现方式。 **Spring Boot** Spring Boot是Spring...
通过以上步骤,你可以快速地在Spring Boot项目中集成并使用Thymeleaf进行动态页面渲染。在实际开发中,还可以探索更多的Thymeleaf特性,如条件语句、循环结构、国际化支持等,以满足更复杂的页面需求。
Thymeleaf 在Spring Boot 中的整合,使得开发者能够方便地进行视图层的渲染,同时提供了与Spring MVC的无缝集成。 Bootstrap 是一个流行的前端开发框架,用于构建响应式和移动优先的网站。它包含了一系列预先设计的...