9.4.4 <fmt:message>标签
<fmt:message>标签用于从资源文件中读取资源信息,并进行格式化输出。<fmt:message>标签有如下三种语法格式:
1 语法1:没有标签体的情况
<fmt:message key="messageKey" [bundle="resourceBundle"]
[var="varName"]
[scope="{page|request|session|application}"]/>
2 语法2:在标签体中指定资源信息占位符参数的情况
<fmt:message key="messageKey" [bundle="resourceBundle"]
[var="varName"] [scope="{page|request|session|application}"]>
0个或多个<fmt:param>标签
</fmt:message>
3 语法3:在标签体中指定资源信息的key和占位符参数的情况
<fmt:message [bundle="resourceBundle"] [var="varName"]
[scope="{page|request|session|application}"]>
key
0个或多个<fmt:param> 标签
</fmt:message>
其中黑体字部分为属性的默认值。
<fmt:message>标签的属性说明如表9.16所示。
表9.16 <fmt:message>标签的属性
属性名 | 是否支持动态属性值 | 属性类型 | 属性描述 |
key | true | String | 指定资源信息的key值。 |
bundle | true | LocalizationContext | 指定保存在Web域中的LocalizationContext对象的属性名。 |
var | false | String | 指定将格式化结果保存在Web域中的属性名。 |
scope | false | String | 指定格式化结果保存在Web域。 |
在使用<fmt:message>标签时应注意如下几点:
1 如果指定的资源信息不存在;或者未指定bundle属性;或者从bundle属性指定的LocalizationContext对象的getResourceBundle方法返回的ResourceBundle对象为null,<fmt:message>标签会输出“???<key>???”形式的错误信息。
2 如果key属性为null或空字符串,<fmt:message>标签会输出“??????”形式的错误信息。
3 如果指定var属性,<fmt:message>标签会将格式化的资源信息保存在Web域中以var属性值为属性名的对象中。如果未指定var属性,<fmt:message>标签会直接输出格式化的资源信息。
4 如果使用语法2和语法3格式化资源信息,并且在标签体中包含<fmt:param>子标签,则<fmt:param>子标签的出现顺序和资源信息中的相应占位符顺序要一致,也就是说,第一个<fmt:param>子标签对应于资源信息中第一个占位符,第二个<fmt:param>子标签对应于资源信息中的第二个占位符,以此类推。
5 如果资源信息中的占位符没有对应的<fmt:param>子标签,则<fmt:message>标签会直接输出资源信息中的占位符。
6 如果<fmt:param>子标签指定的值无法转换成资源信息中相应的占位符的数据类型,<fmt:message>标签会抛出异常。
message.jsp是一个使用<fmt:message>标签格式化资源信息的例子,代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<fmt:setBundle var="bundle" basename="resources.I18nResource"/>
在标签体中指定资源信息的key和占位符参数值<br>
<fmt:message bundle="${bundle}" >
i18n.message
<fmt:param value="${12}" />
<fmt:param value="${216}" />
</fmt:message>
<hr>
将格式化的资源信息保存在page域中,并通过EL输出格式化的资源信息<br>
<fmt:message var="message" bundle="${bundle}" key="i18n.datetime">
<jsp:useBean id="now" class="java.util.Date"/>
<fmt:param value="${now}" />
<fmt:param value="${now}" />
</fmt:message>
${message}
在浏览器地址栏中输入如下的URL:
http://localhost:8080/demo/chapter9/message.jsp
浏览器的输出结果如图9.23所示。
图9.23 使用<fmt:message>标签格式化资源信息