Spring MVC和Thymeleaf:如何从模板访问数据
在典型的Spring MVC应用程序中, @Controller
类负责使用数据准备模型映射并选择要呈现的视图。 该model map
允许视图技术的完整抽象,对于Thymeleaf而言,它被转换为Thymeleaf VariablesMap
对象,该对象使所有定义的变量可用于模板中执行的表达式。
弹簧模型属性
Spring MVC调用在执行视图model attributes
期间可以访问的数据。 Thymeleaf语言中的等效术语是context variables
。 在Spring MVC中,有几种将模型属性添加到视图的方法。 以下是一些常见情况:通过其addAttribute方法向Model添加属性:
@RequestMapping(value = "message", method = RequestMethod.GET)
public String messages(Model model) {model.addAttribute("messages", messageRepository.findAll());return "message/list";}
返回包含模型属性的`ModelAndView`:
@RequestMapping(value = "message", method = RequestMethod.GET)
public ModelAndView messages() {ModelAndView mav = new ModelAndView("message/list");mav.addObject("messages", messageRepository.findAll());return mav;}
通过带有@ModelAttribute注释的方法公开公共属性:
@ModelAttribute("messages")
public List<Message> messages() {return messageRepository.findAll();}
您可能已经注意到,在上述所有情况下,`messages`属性都已添加到模型中,并且在Thymeleaf视图中可用。
在Thymeleaf中,可以使用以下语法访问这些模型属性:`$ {attributeName}`,它是Spring EL表达式。
您可以使用Thymeleaf在视图中访问模型属性,如下所示:
<tr th:each="message : ${messages}"><td th:text="${message.id}">1</td><td><a href="#" th:text="${message.title}">Title ...</a></td><td th:text="${message.text}">Text ...</td></tr>
请求参数
在Thymeleaf视图中可以轻松访问请求参数。 请求参数从客户端传递到服务器,例如:
https://example.com/query?q=Thymeleaf+Is+Great!
假设我们有一个@Controller,它发送带有请求参数的重定向:
@Controllerpublic class SomeController {@RequestMapping("/")public String redirect() {return "redirect:/query?q=Thymeleaf Is Great!";}}
为了访问q参数,您可以使用param。前缀:
<p th:text="${param.q[0]}" th:unless="${param.q == null}">Test</p>
在上面的示例中需要注意两点:
- $ {param.q!= null}`检查是否设置了参数`q`
- 参数始终是字符串数组,因为它们可以是多值的(例如`https://example.com/query?q=Thymeleaf%20Is%20Great!&q=Really%3F)
访问请求参数的另一种方法是使用特殊对象#httpServletRequest,它使您可以直接访问javax.servlet.http.HttpServletRequest对象:
<p th:text="${#httpServletRequest.getParameter('q')}" th:unless="${#httpServletRequest.getParameter('q') == null}">Test</p>
会话属性
在下面的示例中,我们将`mySessionAttribute`添加到会话中:
@RequestMapping({"/"})
String index(HttpSession session) {session.setAttribute("mySessionAttribute", "someValue");return "index";}
与请求参数类似,可以使用`session.`前缀访问会话属性:
<div th:text="${session.mySessionAttribute}">[...]</div>
或者通过使用#httpSession,可以直接访问javax.servlet.http.HttpSession对象。
ServletContext属性,Spring Bean
在丹尼尔·费尔南德斯( DanielFernández )的大力帮助下,我为thymeleaf.org写的这篇文章的完整版本可以在这里找到: http : //www.thymeleaf.org/springmvcaccessdata.html
翻译自: https://www.javacodegeeks.com/2014/05/spring-mvc-and-thymeleaf-how-to-acess-data-from-templates.html
Spring MVC和Thymeleaf:如何从模板访问数据相关推荐
- Spring MVC 5 + Thymeleaf 基于Java配置和注解配置
Spring MVC 5 + Thymeleaf 注解配置 Spring的配置方式一般为两种:XML配置和注解配置 Spring从3.0开始以后,推荐使用注解配置,这两种配置的优缺点说的人很多,我就不 ...
- Spring MVC全局异常后返回JSON异常数据
Spring MVC全局异常后返回JSON异常数据 参考文章: (1)Spring MVC全局异常后返回JSON异常数据 (2)https://www.cnblogs.com/exmyth/p/560 ...
- springboot 入门教程(4)--web开发(spring mvc和Thymeleaf模板,带源码)
2019独角兽企业重金招聘Python工程师标准>>> 首先回顾下前几篇的内容:springboot 入门教程(1),springboot 入门教程-Thymeleaf(2), sp ...
- Spring MVC,Thymeleaf,Spring Security应用程序中的CSRF保护
跨站点请求伪造(CSRF)是一种攻击,它迫使最终用户在当前已通过身份验证的Web应用程序上执行不需要的操作. 如果您使用Spring Security 3.2及更高版本,在Spring MVC / T ...
- spring mvc 中对静态资源的访问配置
在web.xml中配置spring mc servlet 对url-pattern设置时,排除在spring的servlet之外. <servlet><servlet-name> ...
- Spring mvc通过访问者IP限制接口访问频率
我们有的时候系统里面有的用户接口为了控制访问频率,需要使用到,笔记走一波 环境: spring spring mvc Guava:谷歌高并发工具,下面是maven <!--谷歌guava高并发处 ...
- Spring MVC配置静态资源的正常访问
SpringMVC如果过滤器过滤范围配置了/或者/*,那么框架会过滤所有请求,包括自己写的请求和静态资源请求,这样静态资源就不能正常加载,包括js文件.css文件.图片资源访问的时候都会出现404页面 ...
- 小唐开始学 Spring Boot——(3)利用mybatis访问数据表
文章目录 一.过程 创建新项目 创建数据表 创建返回结构 查询函数 方法集成 访问网站 配置数据库 成功 二.项目代码 Testlist.java Test1.java TestMapper.java ...
- Spring MVC 返回视图时添加的模型数据------POJO
POJO(Plain Old Java Objects)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称. 使用POJO名称是为了避免和 EJB混淆起来, 而且简 ...
最新文章
- 【路径规划】Astart算法——图文直观解析
- AI圈真魔幻!谷歌最新研究表明卷积在NLP预训练上竟优于Transformer?LeCun暧昧表态...
- 用c语言编写程序学工系统,[工学]chap02_用C语言编写程序.ppt
- rm: cannot remove directory `test': Permission denied
- 2.5 矩阵乘法规则
- nlp gpt论文_GPT-3:NLP镇的最新动态
- 学生HTML5今后的打算,今后我打算小学生日记
- ios学习路线_OC基础语法
- Mac电脑彻底卸载office(Excel,Word)
- 20中氨基酸名称、简写及化学式
- 当当网商品详情API接口(当当商品详情接口,当当商品问答接口,当当抢购价接口,当当商品列表接口,当当商品评论接口)代码对接教程
- gitlab安装配置
- 服务器支持 TLS Client-initiated 重协商攻击(CVE-2011-1473复现验证)
- python数据分析与应用-Python数据分析与应用-课后习题答案
- html 获取声音频谱,[前端]利用WebAudioAPI获取音频频谱(html5音频可视化)
- @Autowired作用在方法上
- 印度人还上不起网?每天超过800万人在火车站使用免费WiFi
- self与static的浅薄理解
- 【网页设计】期末大作业html+css(体育网站)--杜丹特篮球介绍8页 带报告
- 一次蚂蚁金服的面试经历
热门文章
- alertmanager 告警恢复_Prometheus配置企业微信告警
- jvm的client与server工作模式
- review_core_basic_java(1)java程序设计概述
- IDEA集成maven流程图详细介绍
- dmn是大脑中哪个区域_DMN中的函数式编程:感觉就像再次重读我的大学课程一样...
- lineseparator_首选System.lineSeparator()以用Java编写系统相关的行分隔符字符串
- 得到appd url_AppD方法:Java 9支持
- nodejs异步测试_异步过程的自动化测试
- jboss fuse 教程_使用JBoss Fuse和OpenShift进行Cloud Native Camel骑行
- ajax 示例_通过示例了解挥发