跳羚的网络开发
引入项目登录页面国际化登录拦截器RESTfulthymeleaf处理公共页面元素提取列表的CRUD错误。

引进项目
将html页面放在模板引擎文件夹中的模板下,以便您可以使用模板引擎的功能。登录页面国际化
国际化:编译国际化配置文件1。编译国际化配置文件,并提取需要在第2页上显示的国际化消息。SpringBoot自动配置管理国际化资源文件的组件。
@ Bean @ configuration properties public message source properties message source properties { return new message source properties;} @ bean public message source message source {resourcebundlemessagesource message source = new resourcebundlemessagesource;If )) {string basename = context . get environment . getproperty;message source . setbase names)));}如果!= null){ message source . set default encoding . name);}message source . setfallbacktosystemlocale);duration cache duration = properties . getcache duration;if { message source . setcachemillis);}message source . setalwaysusemessageformat的转义写入);message source . setusecodeasdefaultmessage);返回messageSource}
MessageSource解析:MessageSource架构图:MessageSource:抽象消息接口HierarchicalMessageSource:分层消息源接口,可以获取父消息源MessageSourceSupport:消息源解析的抽象类,指定“MessageFormatting组件消息格式”来格式化消息委托MessageSource:消息源解析委托类。当用户没有指定消息源解析类时,SpringContext默认使用这个类。它的功能很简单:将字符串和参数数组格式化成一个消息字符串AbstractMessageSource:一个支持“配置文件”国际化资源的抽象类。内部提供了独立于区域设置的公共消息配置文件。代码是关键字StaticMessageSource:主要用于程序测试。允许通过编程提供国际化信息。ResourceBundleMessageSource:这个实现类允许用户通过beanName指定资源名,包括该类的完全限定资源名。或者通过beanName指定一组资源名。不同的区域得到不同的资源文件进行加载,达到国际化的目的,ReloadableResourceBundleMessageSource:ReloadableResourceBundleMessageSource和ResourceBundleMessage Source的区别:加载资源的类型和方法:ReloadResourceBundleMessa ge Source依靠Spring的ResourceLoader来加载资源资源,功能更强大。它支持。班级和。属性文件。ResourceBundleMessageSource依靠JDK自己的ResourceBundle加载资源,支持绝对路径和工程路径。支持缓存时间。班级和。属性文件:ReloadResourceBundleMessage Source记录每个资源每次加载的时间点。缓存资源过期后,会再次比较文件的修改时间。如果不变,就不需要加载。同时刷新这个加载时间点ResourceBundleMessageSource主要使用ResourceBundle。控件实现简单的自动加载编码方法:ReloadResourceBundleMessage Source不仅可以指定统一的默认编码方法,同时,它还支持为每个文件单独编码的方法。MessageSource接口:方法描述字符串getMessage获取消息。如果没有找到消息,它将返回缺省值字符串GetMessage Throws NosuchMessageException以获取消息。如果找不到任何消息,则视为错误。string GetMessage Throws NosuchMessageException尝试使用传入的{@code MessageSourceResolvable}参数中包含的所有属性来解析消息。此方法必须抛出{@code NoSuchMessageException},因为调用此方法时,无法确定resolvable { @ code default message }属性是否为空MessageSourceResolvable解析消息元素的包装接口和类:方法描述字符串[] getCode返回解析此消息所用的代码,按照这些代码应该尝试的顺序。因此,的最后一个代码将是默认的代码对象[] GetArguments返回用于解析此消息的参数数组字符串getDefaultMessage。返回用于分析此消息的默认消息HierarchicalMessageSource。消息源的层次接口:方法描述void setParentMessageSource设置将用于解析次要对象无法解析的消息的父级。参数parent是将用于解析此对象无法解析的消息的父MessageSource。可能是{@code null},这种情况下不需要解决MessageSource getparentmessagesource返回当前message source的父代的问题。否则返回{ @ codenull } message source support使用的支持消息源解析的抽象类:方法描述void setAlwaysUseMessageFormat设置是否总是应用消息格式组件,解析不带参数的消息,例如:MessageFromat希望单引号转义为" " "如果消息文本全部用这样的转义写成,即使没有定义参数占位符,也只需要将此标志设置为" true "即可。否则,只有带有实际参数的消息文本才会用MessageFormat转义类boolean isalwaysusemessageformat返回是否应用了消息格式组件,不带解析参数的消息字符串renderDefaultMessage呈现给定的默认消息字符串字符串formatMessage呈现给定的消息字符串消息格式CreateMessage Format为给定的消息和区域设置创建MessageFormatDelegatingMe消息源消息源解析委托类:方法说明字符串getMessage解析消息当父消息解析源不为null时,则使用父消息源来分析消息。否则,将使用消息字符串getmessage throws nosuchmessageexception来分析消息。如果父消息分析源不为空,则使用父消息源来分析消息。否则,将抛出异常字符串getmessage throws nosuchmessageexception解析消息。如果父消息解析源不为空,则使用父消息源解析消息,否则使用自己的消息源解析消息AbstractMessageSourc抽象类Spring支持的配置文件。国际化资源的抽象类:方法描述VoidSetuseCodeasDefaultMessage设置是否使用消息代码作为默认消息,而不是抛出NoSuchMessageException。默认为falseString getMessageInternal将给定的代码和参数解析成给定区域中的消息集,如果没有找到,将返回{ @ codenull } String GetMessageFrompare。如果父消息源中有消息,请尝试从父消息源中检索给定的消息。String getDefaultMessage返回默认消息对象[] ResolveArgements搜索给定的参数数组,找到MessageSourceResolve对象并解析字符串ResolveCodeWithOutArguments解析不带参数的消息。StaticMessageSource是AbstractMessageSource。它允许您以编程方式提供国际信息:方法描述由void addMessage给出。与给定代码相关联的消息void addMessage Batch给定消息与给定代码相关联。ResourceBundleMessageSource是AbstractMessageSource的一个实现类,允许用户通过beanName指定一个资源名——包括类路径的全限定名,或者通过beanNames指定一组资源名:方法描述void setbaseNames设置资源文件void set basenames批量设置资源文件void setDefaultEncoding设置用于解析绑定资源文件的默认字符集void setFallBackToSystemLocale。如果未找到,则默认情况下,特定区域设置的文件是否返回到系统区域设置设置为true。如果为false,则唯一的备用文件将是默认文件void setCacheSeconds设置缓存绑定资源文件的秒数。字符串ResolveCodeWithoutArguments将给定的消息代码解析为注册的资源包中的键。按原样返回包中的值,将给定的消息代码解析为注册的资源包中的键,而不使用MessageFormat来解析MessageFormat resolveCode。每个消息代码都使用缓存的MessageFormat实例ResourceBundle getresourcebundle为给定的baseName和代码返回一个resource Bundle,从缓存中提取生成的MessageFormatresourceBundle Doget Bundle Throws MissingResourceException以获取给定baseName和locale设置的资源包message format getmessage format Throws Missing。ResourceException返回给定包和代码的MessageFormat,从缓存中提取生成的messageformatstring getstringornull,获取资源包中指定的key对应的值。ReloadableResourceBundleMessage源实现类允许用户通过beanName指定资源名,包括类路径和完全限定名。或者通过beanNames指定一组资源名:方法描述字符串ResolveCodeWithoutArguments将消息代码解析为检索到的包文件中的键,并按原样返回在包中找到的值,将给定的消息代码解析为检索到的包文件中的键,而不使用MessageFormat解析MessageFormat resolveCode, 每个消息代码使用缓存的MessageFormat实例属性Holder GetMergedProperties获取locale列表对应的properties对象< string > CalculeAllFilenames计算给定bundle基名和locale的所有文件名将计算设置locale的文件名, 系统区域设置列表的默认文件< string > calculatefilenamesforlocale计算给定的捆绑基本包的名称和区域设置属性的文件名loadProperties解析给定的资源资源,返回的属性对象void clearCache清除所有资源包对应的属性文件Void ClearCacheINCLUDINGANCESTORS清除当前MessageSource和所有父资源的缓存MessageFormat消息组件。 格式化主要是将消息字符串和参数格式化成字符串。
3.获取页面上的国际化值。
在标记体中:th:text = " # { } " th:placeholder = " # { } "非标记体,内联表达式[[# {}]]
国际化原则:本地化;在国际化方面;LocaleResolver
@ Bean @ ConditionalOnMissingBean @ ConditionalOnProperty//默认的区域设置解析器是根据国际解析的请求头的区域设置信息获取区域设置。公共区域设置解析器区域设置解析器{ if = = org . spring framework . boot . auto configure . web . servlet . webmvc properties .LocaleResolver。FIXED){ return new FixedLocaleResolver);} else { acceptbheaderlocaleresolver locale solver = new acceptbheaderlocaleresolver;locale solver . setdefaultlocale);返回localeResolver} }公共区域设置resolve Locale { Locale default Locale = this . getdefaultlocale;if = = null){ return default locale;} else { Locale request Locale = request . get Locale;list supported locales = this . getsupported locales;如果!supported locales . contains){ Locale supported Locale = this . findsupported Locale;if { return supportedLocale} else { return defaultLocale!= null default locale:request locale;} } else {返回requestLocale} } }

登录
在开发期间,如果模板引擎被修改,它将实时生效。1.禁用模板引擎缓存-spring.thymeleaf.cache = false。2.修改页面后,ctrl+F9将用于显示重新编译登录错误消息。
th:text = " $ { msg } " th:if = " $ { not # strings . isempty } "
interseptor
通过拦截器RESTful检查登录
普通CRUD:URI,/资源名/资源标识RESTful CRUD:通过HTTP请求区分对资源的CRUD操作。
示例:
百里香叶提取公共页面元素

提取公共段
引入通用细分市场引入公共片段的两种方式:~{templatename::selector}模板名::选择器~{templatename::fragmentname}模板名::片段名其中模板名会使用thymeleaf的前后缀配置规则进行解析引入的公共片段的Th属性:1.th:insert-将公共片段插入到声明引入的元素中;2 . th:replace——用公共片段替换声明引入的元素;3.th:include-在这个标签中包含引入片段的内容。

