Thymeleaf的Spring数据

介绍

今天,我将讨论更具体的问题。 这次没有设计模式或算法:-)。 我们并不总是从头开始设计软件组件。 通常,我们必须尝试使现有软件组件协同工作。

Spring Boot是Java世界上最好的免费软件之一。 它解决了Spring的许多配置问题。 它非常灵活,功能强大。

Spring Data是Spring项目集合的一部分。 它提供了用于处理数据库的高级工具。 其中最有用的是自动存储库。 一个类可以实现JpaRepository,并且大多数用于处理数据的方法将自动创建。

Thymeleaf是一个HTML模板引擎。 它可以使用Spring Boot的某些功能,例如模板中Spring bean的调用方法以及许多其他内容。 官方文档有很棒的教程。

我使用了spring-boot-starter-parent版本2.0.1.RELEASE – 2.0.4.RELEASE。 其他依赖项由Spring Boot提供。

问题描述

任何与Spring Boot,Spring Data和Thymeleaf一起使用的应用程序的主要思想是编辑数据库中的数据。 Spring-boot-starter-data-jpa包含Hibernate,可用于处理数据库中的数据。 Thymeleaf可用于向用户显示数据。 Spring Boot将它们连接在一起。

一个非常简单的场景包括一个与另一实体具有一对多关系的实体。 用户希望能够创建一个新实体并在HTML中选择另一个实体
选择框。

胸腺

这是第一个问题出现的地方。 如果使用标准的Thymeleaf结构,则不能组装后备bean。在选择框中使用以下结构选择的对象:

<form action="#" th:action="@{/<some Action>}" th:object="${beanObj}" method="post">.... <other fields><select th:field="*{room}" class="textinput"><option th:each="currRoom : ${allRooms}"      th:value="${currRoom}" th:text="${currRoom.name}">no   name</option></select>
</form>

不是由Thymeleaf创建的。 我没有在官方文档中提及此内容。

经过一些调试后,我找到了根本原因。 原来Thymeleaf将所有字段作为参数传递给POST请求。 它使用toString方法将对象转换为String并作为参数添加到POST请求中。 它发送这样的参数:

room: Room+[id=273,+name=room111]

在控制器方法中,必须将该值转换回对象形式。 Spring Boot使用转换器来做到这一点。

解决方案是–向conversionService注册适当的转换器。 并在实体的toString方法中使用这些转换器,以确保使用相同的方法来转换为String形式并返回。

下一个问题

听起来很有趣不是吗? 已经找到解决方案,但是还有更多问题吗? 实际上,所描述的解决方案在没有Spring Data的情况下效果很好。 使用Spring Data,转换再次失败。 而且即使没有Spring Data也不需要该bean,Spring Boot仍希望您创建entityManagerFactory bean。

下一个解决方案

可以通过在Internet上进行一些深入的搜索来解决entityManagerFactory bean的问题。 这是我最终得到的解决方案:

@Primary@Beanpublic LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource ds) {LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();em.setDataSource(ds);em.setPackagesToScan("<some packages>");JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();em.setJpaVendorAdapter(vendorAdapter);em.setJpaProperties(additionalProperties());return em;}@Beanpublic SessionFactory sessionFactory(@Qualifier("entityManagerFactory") EntityManagerFactory emf) {return emf.unwrap(SessionFactory.class);}
private Properties additionalProperties() {Properties properties = new Properties();properties.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");properties.setProperty("hibernate.default_schema", "public");properties.setProperty("hibernate.show_sql", "true");// Validation will fail because the tables use bigint as the ID but it is mapped to the Integer type by Hibernate// Validation expects a 8-bit number as the mapping to bigint.properties.setProperty("hibernate.hbm2ddl.auto", "none");return properties;}

第二个问题原来更加复杂,需要大量调试。 最终,我发现spring-data某种程度上改变了Spring Boot使用的转换服务。 使用Spring Data mvcConversionService代替默认的conversionService。 格式程序/转换器必须添加到WebMvcConfigurer类(实现WebMvcConfigurer的类)中。 方法是addFormatters:

@Overridepublic void addFormatters(FormatterRegistry registry) {registry.addConverter(new <SomeConverter>);...

现在,所有问题已解决,Spring Data可以与Thymeleaf一起使用。
快乐的编码和勤奋的调试!

翻译自: https://www.javacodegeeks.com/2018/11/spring-data-thymeleaf.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344134.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何有效维护PDH光端机的常见故障?

众所周知&#xff0c;在PDH光端机的使用过程中&#xff0c;出现的故障可分为永久性故障和间断性故障。而永久性故障是指反映告警一直保持&#xff1b;间断性故障则是指故障时有时无&#xff0c;有时还可自动恢复。但无论是哪种故障&#xff0c;都与传输网有着密不可分的关系。接…

转为字符数组_数组的20种常用的方法?

1.shift 删除数组中的第一个元素2.pop 删除数组中的最后一个元素3.unshift 增加元素在数组的前面4.push 增加元素在数组的后面5.map 循环&#xff0c;并且返回新的数组6.forEach 循环&#xff0c;遍历7.filter 过滤&#xff0c;筛选出数组中的满足条件的&#xff0c;并且返回新…

Profibus-DP光端机产品功能特点及技术参数详解

Profibus DP总线光端机&#xff0c;符合Profibus DP协议&#xff0c;采用大规模FPGA设计&#xff0c;采用独创技术&#xff0c;可同时支持1路Profibus-DP到光纤中继&#xff0c;通信速率0-12Mpbs。支持多种光纤网络拓扑结构&#xff1a;点对点通讯、链型网络、星型网络及冗余环…

jenkins编译java_在Window上使用Jenkins自动发布Java工件

jenkins编译java这篇文章将展示如何使用Jenkins Continuous Integration自动执行Java Web应用程序&#xff08;使用MYSQL DB和基于Hibernate ORM在基于REST的Jersey2 Spring环境中开发的学生申请应用程序&#xff09;的发布过程-上载发布工件到发布存储库。 如上一篇文章《在Wi…

工业级光纤收发器九大技术优势介绍

光纤收发器主要是通过光纤来进行传输的那些100M以太网或1000M以太网&#xff0c;不过也被大家称之为光纤交换机&#xff0c;简而言之&#xff0c;可以将我们要发送的电信号转换成光信号发送出去&#xff0c;同时将接收到的光信号转换成电信号&#xff0c;输入到我们的接收端&am…

TellDontAsk的扩展

五年多来&#xff0c;Martin Fowler在他著名的TellDontAsk文章中指出了面向对象编程中的最大问题之一。 在他的著作中&#xff0c;他提醒程序员&#xff0c;他们应该信任自己的对象来为他们执行工作&#xff0c;而不是要求对象提供以后可以使用的数据。 我非常同意这一点&…

网管型光纤收发器产品功能特性详解

飞畅科技生产的网管型光纤收发器机架&#xff0c;吸收了国内外同类产品的优点&#xff0c;产品更具灵活性和实用性。网管光纤收发器采用结构灵活的机架模块化设计&#xff0c;十六槽2U机箱、电源模块及标准的热插拔模块组成&#xff0c;机箱内置双容错电源及无源背板总线&#…

使用函数_使用TEXT函数生成中文大写金额

为满足《中华人民共和国票据法》中对中文大写金额的书写要求&#xff0c;可以使用TEXT函数将数字格式转换为中文大写金额。图中A列是小写的金额&#xff0c;需要在B列使用公式将其转换为中文大写金额。生成中文大写金额在B2单元格中输入以下公式&#xff0c;向下复制到B6单元格…

光端机各种类型的接口介绍

光端机的接口类型还是比较多的&#xff0c;常见的物理接口类型有BNC接口、光纤接口、RJ-45接口、RS-232接口、RJ-11接口。那么&#xff0c;你对这五种典型的物理接口类型是否有所了解呢&#xff1f;接下来就由飞畅科技的小编一起来详细了解下吧&#xff01; 光端机的典型物理接…

五金反引号

五种琴弦 从Java 1.0开始&#xff0c;我们就有了字符串文字"like this" 。 我们还想要其他什么字符串&#xff1f; 其他编程语言为我们提供&#xff1a; 表达式插值&#xff1a; s"I am ${age - 10} years old." 插值格式&#xff1a; f"Price: $pr…

多功能视频光端机_多业务光端机的功能特性

视频光端机&#xff0c;就是把1到多路的模拟视频信号通过各种编码转换成光信号通过光纤介质来传输的设备&#xff0c;由于视频信号转换成光信号的过程中会通过模拟转换和数字转换两种技术&#xff0c;所以视频光端机又分为模拟光端机和数字光端机。光端机原理就是把信号调制到光…

curl_exec() 执行的时候发送不出去_为什么端口明明开着,nmap却扫描不出来,看老司机怎么指点迷津...

大家应该都知道&#xff0c;nmap是用来扫描端口的标杆级神器&#xff0c;我们经常在运维工作或安全评估中使用到它。在使用的时候&#xff0c;我们可能会碰到明明目标IP端口有开着&#xff0c;但是nmap却死活扫描不出来&#xff0c;等了大半天却得到一些不可靠的结果。那到底是…

4路视频+4路百电(物理隔离)+8路电话+开关量+串口+电话光端机 武警光端机

产品描述 本系列产品&#xff0c;是在该公司研制的专用超大规模集成电路的基础上&#xff0c;研发的点对点多业务光传输设备。此款产品提供4路视频&#xff0c;1-8路电话接口&#xff1b;1-16路开关量接口/1-8路RS232-422-485接口&#xff1b;4路百兆以太网接口&#xff0c;4路…

武警多业务光端机,五防光端机产品介绍

产品描述 本系列产品&#xff0c;是在该公司研制的专用超大规模集成电路的基础上&#xff0c;研发的点对点多业务光传输设备。此款产品提供4路视频&#xff0c;1-4路电话接口&#xff1b;1-16路开关量接口/1-8路RS232-422-485接口&#xff1b;4路千兆以太网接口&#xff08;共享…

与kylin_什么是Kylin,Kylin的学习

概述Kylin定义Apache Kylin是一个开源的分布式分析引擎&#xff0c;提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据&#xff0c;最初由eBay开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。Kylin架构1)REST ServerREST Server是一套面向应用程…

工业轨式 1-16路 4-20MA 模拟量光端机产品介绍

产品描述 本系列设备采用大规模FPGA设计&#xff0c;采用独创技术&#xff0c;可同时支持 1~8 通道模拟量信号&#xff08;电流/电压&#xff09;到光纤中继&#xff0c;每组模拟量有24V供电输出VO脚&#xff0c;方便给传感器等设备供电。该设备采用双电源供电&#xff0c;高性…

采购光纤收发器时应该注意哪些事项?

目前市场上国外和国内生产光纤收发器的厂商很多&#xff0c;产品线也极为丰富&#xff0c;光纤收发器的种类也不一&#xff0c;主要分为机架式光收发器、台式光收发器和卡式光收发器。在实际的采购中&#xff0c;企业考虑的一个重要的因素是价格。当然&#xff0c;除价格外同时…

scala集合转java_Java,Scala,Guava和Trove集合-它们可以容纳多少数据?

scala集合转java关于我们的数据结构的一个有趣的事情是&#xff0c;即使我们非常熟悉它们&#xff0c;但对于我们来说&#xff0c;仍然很难说出像HashMap这样基本的东西在1GB的内存中可以容纳多少个项目。 我们可能会在学校&#xff0c;高级开发人员那里学到这一点&#xff0c;…

单模单纤的光纤收发器A、B端的位置可以互换吗?

单纤光纤收发器&#xff1a;接收发送的数据在一根光纤上传输顾名思义&#xff0c;单纤设备可以节省一半的光纤&#xff0c;即在一根光纤上实现数据的接收和发送&#xff0c;在光纤资源紧张的地方十分适用。那么&#xff0c;单模单纤的光纤收发器A、B端的位置可以互换吗&#xf…

最常见的SQL报错注入函数(floor、updatexml、extractvalue)及payload总结

SQL报错注入是一种常见的SQL注入攻击方式&#xff0c;攻击者通过注入恶意代码&#xff0c;触发数据库的错误响应&#xff0c;并从错误信息中获取有用的信息。 下面介绍最常见的三个报错注入函数用法及payload总结&#xff1a; 1、floor() 使用floor报错注入&#xff0c;需要…