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;都与传输网有着密不可分的关系。接…

【渝粤题库】陕西师范大学209018 现代城市管理 作业

一、单项选择题 1、从市政职能看&#xff0c;它主要研究城市政府对公共事务和&#xff08; &#xff09;。 A、城市规划 B、城市环境 C、公共事业 D、私人产品 2、根据有关资料&#xff0c;世界上第一个超过10万人口的城市&#xff0c;是公元前14世纪的&#xff08; &#xff0…

转为字符数组_数组的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;点对点通讯、链型网络、星型网络及冗余环…

【渝粤题库】陕西师范大学800010 经济地理学

《经济地理学》作业 一、选择题 1、自然条件和自然资源不是产业布局的( )。 A.前提 B.基础 C.充分条件 D.必要条件 2、下列关于三次产业分类法&#xff0c;说法不正确的是( )。 A.三次产业分类法的依据和标准是产品的性质和生产过程的特征 B.费希尔明确提出了第三次产业的概念…

[渝粤教育] 西南科技大学 工程建设监理 在线考试复习资料

工程建设监理——在线考试复习资料 一、单选题 1. 监理工程师在施工现场发出的口头指令及要求,应采用( )。 A.联系单予以确认 B.变更单予以确认 C.通知单予以确认 D.回复单予以确认 2.主持制订监理规划并组织实施是( …

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…

单片机c语言篮球比分_基于单片机的篮球比赛计时计分器的设计

摘 要&#xff1a;本系统是采用单片机AT89C51作为本设计的核心原件。利用7段共阴LED作为显示器件。在此设计中共接入了2个7段共阴LED显示器&#xff0c;用于记录得分和比赛时间&#xff0c;显示范围可以达到0到99分&#xff0c;基本满足赛程需求。计分按照倒计时&#xff0c;每…

[渝粤教育] 西南科技大学 建筑制图 在线考试复习资料(1)

建筑制图——在线考试复习资料 一、单选题 1.截平面通过锥顶完全截割圆锥时,截交线为( ) A.椭圆 B.抛三角形 C.四边形 D.圆 2.下列说法正确的是( ) A.投影面垂直线满足中心投影规律 B.投影面垂直线可以在两个投影面反映集聚性 C.直线垂直于一个投影面,必然平行于其余两个投影面…

[渝粤教育] 西南科技大学 形式逻辑 在线考试复习资料

形式逻辑——在线考试复习资料 一、单选题 1. 下列直言命题主项周延,谓项不周延的有( )。 A.阿根廷不是北美国家 B.有些作物不是栽培的 C.所有宗教都不是科学 D.没有一种事物不是运动变化的 E.不都是可以避免的 2. 这几年参加注册会计…

echart 折线从左到右动画效果_echarts之自动切换折线图

echarts有legend控件可以控制多个折线图之间的切换legend: {data: [财经,娱乐,社会],selectedMode: "single", //单选模式&#xff0c;每次出现一条折线图y: y, //由于需要自适应&#xff0c;此值用变量动态改变right: 10,inactiveColor: "#ADD9FF", //选中…

TellDontAsk的扩展

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

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

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

[渝粤教育] 中国地质大学 大学英语(1) 复习题

《大学英语(1)》模拟题 一.单选题 — ______ is the man near the window? — Oh he is Tom. A. What B. Who C. How — I don’t get up late on Sundays.— _____ do I. A. Neither B. Either C. So — I have got a pain in my chest. — You _____ see the doctor. A. …

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

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

[渝粤教育] 中国地质大学 C语言程序设计(新) 复习题

《C语言程序设计》模拟题 一、单项选择题 1.下面程序运行的结果是 void ss(char *schar t) { while(*s) { if(*s t) *st-‘a’’A’; s; } } void main() { char str1[100]”abcddfefdbd”c’d’; ss(str1c); printf("%s\n"str1); } A.ABCDDFEFDBD B.abcDDfefDbD C.a…

简要分析电话光端机的常见问题

关于电话光端机&#xff0c;其实我们已经了解过许多&#xff0c;而许多朋友对光端机还是存有许多疑问。接下来飞畅科技的小编就来为大家详细介绍下电话光端机常见问题有哪些&#xff1f;感兴趣的朋友就赶紧跟着小编一起来看看吧&#xff01; 电话光端机常见问题有哪些&#xf…

[渝粤教育] 中国地质大学 Windows程序设计 复习题 (2)

《Windows程序设计》模拟题 一单选题 1.所有的Windows应用程序都是由()驱动的. A.事件 B.消息 C.命令 D.菜单 2.一般应用程序不会派生自己的()类. A.主框架 B.视图 C.菜单 D.文档 3.MessageBox不能完成()功能. A.接收用户输入 B.显示消息 C.改变对话框标题 D.显示问号图标 4…

java期末考试试卷及答案文库_JAVA期末考试试题及答案.docx

x[j1]){ wx[j]; x[j]x[j1]; x[j1]w; }/* if(i1||i2) ShowArray(x); if(i2) break; */}}public static void ShowArray(int b[]){for(int i0; iy; System.out.println("x>y"flag); flagz>w; System.out.println("z>w"flag);}}四、问答题&#xff1…