Spring Boot + Bootstrap + jQuery + Freemarker
Spring Boot + Bootstrap + jQuery + Freemarker
原文地址:http://qilu.me/post/tech/2018-03-18
最近在写一些Web的东西,技术上采用了Spring Boot + Bootstrap + jQuery + Freemarker。过程中查了大量的资料,也感受到了前端技术的分裂,每种东西都有N种实现,组合起来,每种解决方案的资料却很有限。
这篇文章记录下多语言国际化的实现,以支持中英文为例。
首先是页面内容的国际化
1.定义页面文本配置文件的路径,在application.properties里添加spring.messages.basename=i18n/messages
2.在resources/目录下创建上述目录,添加3个配置文件messages.properties、messages_zh.properties、messages_en.properties,分别对应默认,中文和英文配置,完整路径为resources/i18n/messages.properties
3.在配置文件里定义每条需要国际化的文本,比如中文 index.title=麦希工具 - 您身边的助手,英文Meta Tool - Your Best Assistant
4.在Freemarker文件里使用<@spring.message ""/>来输出文本,比如<@spring.message "index.title"/>
再说下验证内容的国际化
所谓验证内容,就是比如在填Form表单的时候,有些字段有格式或数值等的要求,表单提交时,应该验证数据是否符合要求。验证又分前端验证和后端验证,一般结合使用。
前端用来验证格式(必须是数字/英文/邮件)等,如:
这里pattern使用正则表达式,定义了输入框输入字符的范围和数量。
后端用来验证数值(必须大于18岁)等,可以在Spring Boot的VO对象里,以添加注解的形式实现,如:
@Min(value = 100, message = "不能低于100cm")
@Max(value = 250, message = "不能高于250cm")
private String height;
这里就出现了问题,即注解也应该采用配置文件的形式,以支持多语言切换,这就是验证内容的国际化。
1.定义验证文本配置文件的路径,在application.properties里添加spring.messages.basename=i18n/messages,i18n/ValidationMessages,前面的是第一节的页面文本,后面的是验证文本
2.在resources/目录下创建上述目录,添加3个配置文件ValidationMessages.properties、ValidationMessages_zh.properties、ValidationMessages_en.properties,分别对应默认,中文和英文配置,完整路径为resources/i18n/ValidationMessages.properties
3.在配置文件里定义每条需要国际化的文本,比如中文 vm.bmi.height.lower=不能低于100cm,英文vm.bmi.height.lower=Can Not Lower Than 100cm
4.与页面文本相比,这里要多做一步,即在代码里覆盖默认验证器的配置,在代码根目录添加以下文件:
@Configuration
public class CustomConfiguration implements WebMvcConfigurer {
@Autowired
private MessageSource messageSource;
@Override
public Validator getValidator() {
return localValidatorFactoryBean();
}
@Bean
public LocalValidatorFactoryBean localValidatorFactoryBean() {
LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
validator.setValidationMessageSource(messageSource);
return validator;
}
}
5.在接收表达的VO对象的属性上,使用验证文本作为提示
public class BmiVo {
@Min(value = 100, message = "{vm.bmi.height.lower}")
@Max(value = 250, message = "{vm.bmi.height.upper}")
private String height;
6.在表单上添加验证失败后的提示,使用<@spring.bind "" />绑定VO对象的属性,使用<@spring.showErrors ""/>显示属性验证失败的提示
cm
这样就做到了页面内容和验证内容的多语言国际化支持,具体示例参看Meta Tool
Spring Boot + Bootstrap + jQuery + Freemarker的更多相关文章
- spring boot ----> 常用模板freemarker和thymeleaf
===========================freemarker=================================== freemarker 官网:https://freem ...
- 玩转spring boot——结合jQuery和AngularJs
在上篇的基础上 准备工作: 修改pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...
- Spring Boot+BootStrap fileInput 多图片上传
一.依赖文件 <link rel="stylesheet" type="text/css" th:href="@{/js/bootstrap/c ...
- Spring Boot使用模板freemarker【从零开始学Spring Boot(转)
视频&交流平台: à SpringBoot网易云课堂视频 http://study.163.com/course/introduction.htm?courseId=1004329008 à ...
- spring boot中使用freemarker
在做Java web开发领域,web模板引擎主要有jsp.freemarker.velocity,其中freemarker是我们常用的一种,在spring boot中使用的freemarker的方法可 ...
- Spring boot之使用freemarker
大纲 (1)在pom.xml中引入freemarker; (2)如何关闭freemarker缓存 (3)编写模板文件.ftl (4)编写访问文件的controller 在pom.xml中引入freem ...
- Spring Boot + Bootstrap 出现"Failed to decode downloaded font"和"OTS parsing error: Failed to convert WOFF 2.0 font to SFNT"
准确来讲,应该是maven项目使用Bootstrap时,出现 "Failed to decode downloaded font"和"OTS parsing error: ...
- Spring Boot +Bootstrap 图片上传与下载,以及在bootstrap-table中的显示
1.前台上传: <input type="file" name="file" id="file"> 2.后台的接收与处理: St ...
- Spring Boot + Freemarker多语言国际化的实现
最近在写一些Web的东西,技术上采用了Spring Boot + Bootstrap + jQuery + Freemarker.过程中查了大量的资料,也感受到了前端技术的分裂,每种东西都有N种实现, ...
随机推荐
- asp.net 字符串过滤
/// <summary> /// 去除HTML标记 /// </summary> /// <param name="Htmlstring">包 ...
- (转载)Android常用的Dialog对话框用法
Android常用的Dialog对话框用法 Android的版本有很多通常开发的时候对话框大多数使用自定义或是 Google提供的V4, V7 兼容包来开发保持各个版本的对话框样式统一,所以这里使用的 ...
- hdu4009 Transfer water 最小树形图
每一户人家水的来源有两种打井和从别家接水,每户人家都可能向外输送水. 打井和接水两种的付出代价都接边.设一个超级源点,每家每户打井的代价就是从该点(0)到该户人家(1~n)的边的权值.接水有两种可能, ...
- 了解权限控制框架shiro 之实际应用.
Apache Shiro 1.权限控制分为 a.粗粒度 URL 级别权限控制 b.细粒度方法级别权限控制 2.使用shiro进行权限控制主要有四种主要方式 : a. 在程序中 通过 Subje ...
- spring之interceptor篇
springmvc中要写一个拦截器非常的简单,有两种方式:要么实现HandlerInterceptor接口或者继承实现了该接口的类,如spring已经为我们写好的一个HandlerIntercepto ...
- PhotoZoom Pro 7 支持哪些图像格式?
PhotoZoom是一款新颖的.技术上具有革命性的对数码图片无损放大的工具.为设计工作者提供了优良的解决方案,可快速渲染出完美的放大照片,呈现无与伦比的画质效果.将因其应用的广泛性,所以对图像文件的支 ...
- TF基础5
卷积神经网络CNN 卷积神经网络的权值共享的网络结构显著降低了模型的复杂度,减少了权值的数量. 神经网络的基本组成包括输入层.隐藏层和输出层. 卷积神经网络的特点在于隐藏层分为卷积层和池化层. pad ...
- 洛谷P2776 [SDOI2007]小组队列 链表 + 模拟
有些细节需要注意: 1.编号和元素种类都从0开始标号. 2.需要特判一下队列被弹空的情况. Code: #include<cstdio> #include<cstring> u ...
- 【udacity】机器学习
Evernote Export 2.人工智能简介 机器学习源自于人工智能,在此方向上,该领域有分为不同学派,机器学习主要关注的是制造能够自主动作的机器 3.人工智能难题 1.所有智能体都只有很少的计算 ...
- P3375 【模板】KMP字符串匹配 (KMP模板)
题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next. (如果你不知道这是什么意思也不要问,去百度 ...