8.4.5 <fmt:message>标签
<fmt:message>标签用于从一个资源包中读取信息并进行格式化输出,它有如下一些使用语法格式:
语法1,没有标签体的情况:
<fmt:message key="messageKey"
[bundle="resourceBundle"]
[var="varName"]
[scope="{page|request|session|application}"] />
语法2,在标签体中指定格式化文本串中的占位符参数的情况:
<fmt:message key="messageKey"
[bundle="resourceBundle"]
[var="varName"]
[scope="{page|request|session|application}"]>
<fmt:param>subtags
</fmt:message>
语法3,在标签体中指定消息关键字和可选择的占位符参数:
<fmt:message [bundle="resourceBundle"]
[var="varName"]
[scope="{page|request|session|application}"]>
key
optional <fmt:param>subtags
</fmt:message>
<fmt:message>标签的属性说明如表8.15所示。
表8.15 <fmt:message>标签的属性
属性名 |
是否支持EL |
属性类型 |
属 性 描 述 |
key |
true |
String |
指定要输出的信息的关键字 |
bundle |
true |
LocalizationContext |
指定ResourceBundle对象在Web域中的属性名称 |
var |
false |
String |
用于指定将格式化结果保存到某个Web域中的某个属性的名称 |
scope |
false |
String |
指定将格式化结果保存到哪个Web域中 |
<fmt:message>标签有如下一些特性:
l 如果指定的资源不存在,输出“???<key>???”形式的错误信息。
l 如果ResouceBundle中不存在key属性指定的信息,输出“???<key>???”形式的错误信息。
l 如果key属性的值为null或空字符串,输出“??????”形式的错误信息。
l 如果没有指定var属性,<fmt:message>标签将直接输出格式化的结果;如果指定了var属性,则<fmt:message>标签将格式化的结果保存在scope属性指定的Web域中,保存在Web域中的属性名称为var属性指定的值。如果指定了scope属性,就必须指定var属性。
l 要输出的消息的关键字可以使用key属性指定,也可以在标签体中指定。如果<fmt:message>标签嵌套在<fmt:bundle>标签内,并且<fmt:bundle>标签设置了prefix属性,则该属性的值追加到<fmt:message>标签指定的关键字的前面。
l 可以通过在<fmt:message>标签内嵌套<fmt:param>标签来指定格式化文本串中的占位符的参数值,每个<fmt:param>标签分别设置一个参数,各个<fmt:param>标签的顺序与格式化字符串的参数相对应,即第一个<fmt:param>标签对应于格式化字符串中的第一个参数,第二个<fmt:param>对应于格式化字符串中的第二个参数,依次类推。
l 如果<fmt:message>标签处理的格式化文本串中包含有参数,但其中没有嵌套与该参数对应<fmt:param>标签,则直接输出该参数在格式化文本串中的原始形式。
例程8-30是一个使用<fmt:message>标签的例子程序。
例程8-30 fmt_message.jsp
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page contentType="text/html;charset=gb2312" %>
<jsp:useBean id="now" class="java.util.Date" />
<%
session.setAttribute("number", new Integer(8888888));
%>
<fmt:setBundle basename="org.it315.greetings" var="greetings" />
<fmt:message>标签内嵌套<fmt:param>标签的情况:<br />
<fmt:message bundle="${greetings}">
org.it315.okKey
<fmt:param value="${now}" />
<fmt:param value="${number}" />
</fmt:message><br /><hr />
<fmt:message>标签内没有嵌套<fmt:param>标签的情况:<br />
<fmt:bundle basename="org.it315.greetings" prefix="org.it315.">
<fmt:message key="okKey" />
</fmt:bundle>
例程8-30的运行结果如图8.25 所示。
图8.25
8.4.6 <fmt:param>标签
<fmt:param>标签用于为格式化文本串中的占位符设置参数值,它只能嵌套在<fmt:message>标签内使用。<fmt:param>标签有如下两种语法格式:
语法1,用value属性指定参数值:
<fmt:param value="messageParameter" />
语法2,在标签体中指定参数的值的情况:
<fmt:param>
body content
</fmt:param>
说明:<fmt:param>标签的value属性的类型是java.lang.Object,它支持动态属性值。在前面的例程中已经多次使用了<fmt:param>标签,这里就不再对<fmt:param>标签进行举例讲解了。