9.4.4 <fmt:message>标签

优质
小牛编辑
124浏览
2023-12-01

<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所示。

23

图9.23 使用<fmt:message>标签格式化资源信息