使用Spring的通用标签库
- 使用Spring的通用标签库,必须要在页面上对其进行声明
<%@ taglib prefix="s" uri="http://www.springframework.org/tags" %>
展现国际化信息
- 对于渲染文本来说,<s:message>是很好的方案,文本能够位于一个或多个属性文件中。借助<s:message>,可以将硬编码的欢迎信息:
<h1>Welcome to Spittr</h1>
替换为如下的形式
<h1><s:message code="spittr.welcom" /></h1>
- <s:message>将会根据key为spittr.welcom的信息源渲染文本。因此需要配置一个这样的信息源。Spring有多个信息源的类,它们都实现了MessageSource接口。
(1)更为常见和有用的是ResourceBundleMessageSoource。它会从一个属性文件中加载信息,这个属性文件的名称是根据基础名称(base name)衍生而来的。如下的@Bean方法配置了ResourceBundleMessageSoource:
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource =
new ResourceBundleMessageSource();
messageSource.setBasename("message");
return messageSource;
}
在这个bean声明中,核心在与设置basename属性,其将会在根路径的 属性文件中解析信息,这些属性文件的名称是根据这个basename得到的。
(2)另外的可选方案是使用ReloadableResourceBundleMessageSource ,其工作方式与ResourceBundleMessageSource非常相似,但是它能够重新加载信息属性,不必重新编译或重启应用。
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource =
new ReloadableResourceBundleMessageSource();
messageSource.setBasename("file:///etc/spittr/message");
messageSource.setCacheSeconds(10);
return messageSource;
}
关键区别在于basename属性设置为在应用的外部查找(而不是像ResourceBundleMessageSource那样在累路径下查找)。
- message.properties文件的配置,以英语为例
spittr.Welcom=Welcom to Spittr!
创建URL
- <s:url>的主要任务就是创建URL,然后将其复制给一个变量或者渲染到响应中。按照其最简单的形式, <s:url>会接受一个相对于上下文的URL,并在渲染的时候,预先添加上Servlet上下文路径。例如考虑如下 <s:url>的基本用法:
<a href="<s:url href="/spitter/register"/>">Register</a>
如果应用的上下文名是spittr,那么在响应中会渲染如下的HTML:
<a href="/spittr/spitter/register">Register</a>
- 还可以使用<s:url>创建URL,并将其赋值给一个变量供模版在稍后使用:
<s:url value="/spitter/register" var="registerUrl" />
<a href="${registerUrl}"></a>
默认情况下,URL是在页面作用于内创建的。但是可以通过scope属性,让 <s:url>在应用作用域内、会话作用域内或者请求作用域内创建URL:
<s:url value="/spitter/register" var="registerUrl" scope="request"/>
<a href="${registerUrl}"></a>
- 在URL上添加参数,可以使用<s:param>标签:
<s:url value="/spittles" var="spittlesUrl">
<s:param name="max" value="60" />
<s:param name="count" value="20" />
</s:url>
使用<s:param>标签还可以创建带有路径参数的URL,时期具有路径变量的占位符:
<s:url value="/spittles/{userName}" var="spittlesUrl">
<s:param name="userName" value="jbauer" />
</s:url>
当value属性中的占位符匹配<s:param>中指定的参数时,这个参数将会插入到占位符的位置中。如果<s:param>参数无法匹配value中的任何占位符,那么这个参数将会作为查询参数。
- <s:url>还可以解决URL的转移需求。
(1)可以通过设置htmlEscape属性为true,将渲染得到的URL内容展现在Web页面上(而不是作为超链接)。
<s:url value="/spittles" htmlEscape="true">
<s:param name="max" value="60" />
<s:param name="count" value="20" />
</s:url>
(2)可以将javaScriptEscape属性为true,便可以在Java代码中使用URL:
<s:url value="/spittles" var="spittlesJSUrl" javaScriptEscape="true">
<s:param name="max" value="60" />
<s:param name="count" value="20" />
</s:url>
<script>
var spittlesUrl = "${spittlesJSUrl}"
</script>
转义内容
- <s:escapeBody>标签是一个通用的转义标签。通过设置htmlEscape属性为true,可以在页面上展现一个HTML代码片段;通过设置javaScript属性为true,可以实现JavaScript的的转义。