国际化动态文件和其他标签的实例应用
一 动态文件的概念
1.什么时候使用动态文本
如果字符串中包含了多个与国际化相关的数据,可以使用MessageFormat类对这些数据进行批量处理 ----比如一段字符串中包含时间、数字、货币、、可以进行批量处理
(1)MessageFormat类允许开发人员用占位符替换掉字符串中的敏感数据(即国际化相关的数据)。
(2)MessageFormat类在格式化输出包含占位符的文本时,messageFormat类可以接收一个参数数组,以替换文本中的每一个占位符。
(3)批量处理是把国际化的文件用占位符代替,组成一个数组
二 动态文本的使用
1.在java中动态文本的使用
(1)把字符串改为(模式字符串)占位符
At 12:30 pm onjul 3,1998, a hurricance destroyed 99 houses and caused $1000000 of damage
代替为:
模式字符串:
pattern =At [0], a hurricancedestroyed [1] houses and caused [2] of damage
(2)设置动态文本的模型,并指明显示的国家,可以值确定模式,默认的国家的当地的
MessageFormat mf = newMessageFormat(pattern, Locale.US);
(3)创建数组为模式字符串赋值(为占位符赋值)
Object[] objs = { new Date(), newInteger(99), new Double(1e7)};
(4)格式转换并输出
String result = mf.format(objs);
System.out.println(result);
注:按以上的说法,只是固定的把它写到了java文件中,可以把模式字符串部署到资源组中
2.在jsp页面中动态文本的运用----标签的使用
(1)创建资源包对象,并存在bundle对象中
<fmt:setBundle basename="com.hbsi.resource.MyResource"var="bundle" scope="request"/>
(2)读取并输出
<fmt:message key="title"bundle="${bundle}">
<!-- 为占位符赋值 ----------- 批量处理-->
<fmt:param value="${date}" ></fmt:param>
<fmt:param value="${number1}"></fmt:param>
<fmt:param value="${number2}"></fmt:param>
</fmt:message>
注:如果在<fmt:message>标签中,没有key属性,可以在<fmt:message>的双标签中写上在value中写的文件中的键,例:
<fmt:messagebundle="${bundle}">
title
<fmt:param value="${date}" ></fmt:param>
<fmt:param value="${number1}"></fmt:param>
<fmt:param value="${number2}"></fmt:param>
</fmt:message>
三 国际化中其他标签的使用
1.乱码问题
用java方法解决
<%
request.setCharacterEncoding("utf-8");
%>
--%>
用国际化标签设置
<fmt:requestEncodingvalue="utf-8"/>
2.设置时区
(1)<fmt:timeZone>标签
<fmt:timeZone value="GMT+08:00">
</fmt:timeZone>
注:<fmt:timeZone>设置时区 ,但是他的设置值只对标签体中的内容有效
(2)<fmt:setTimeZone>标签
设置时间
<jsp:useBean id="date"class="java.util.Date"></jsp:useBean>
<fmt:setTimeZone value="GMT+08:00"/>
<%---日期类型的转换 --%>
一
<fmt:formatDate value="${date}" type="both" dateStyle="long" timeStyle="short" var="time1"scope="request"/><br/>
${time1}
二
<fmt:setTimeZone value="GMT+07:00"/>
<fmt:formatDate value="${date}" type="time" timeStyle="full" />
三
<fmt:formatDate value="${date}" pattern="yyyy.MM.dd HH:sss.SSS a"/>
fn:length函数
fn:length函数用于返回一个集合或数组对象中包含的元素的个数,或返回一个字符串中包含的字符的个数,返回值为int类型。fn:length函数接收一个参数,这个参数可以是<c:forEach>标签的items属性支持的任何类型,包括任意类型的数组、java.util.Collection、java.util.Iterator、java.util.Enumeration、java.util.Map等类的实例对象和字符串。
如果fn:length函数的参数为null或者是元素个数为0的集合或数组对象,则函数返回0;如果参数是空字符串,则函数返回0。例程8-55是使用fn:length函数的实例程序。
例程8-55 fn_length.jsp
<%@ taglibprefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ pagecontentType="text/html;charset=gb2312" %>
<%@ pageimport="java.util.*, org.it315.UserBean" %>
<%
Collection users = new ArrayList();
for(int i=0; i<5; i++)
{
UserBean user = new UserBean();
user.setUserName("user"+ i);
user.setPassword("guest"+ i);
users.add(user);
}
session.setAttribute("users",users);
%>
There are${fn:length(users)} users online.<hr />
字符串“www.it315.org”中包含 ${fn:length("www.it315.org")} 个字符