- 浏览: 26648 次
- 性别:
- 来自: 厦门
最新评论
概述
类MessageResources可以使开发者方便地支持多语言,包括支持多时间格式和数字格式。使用资源包的另一个好处是允许开发者将标签字符 串集中存储在一个位置,而不是分散在不同的JSP页面里。例如,对于每个用户的名字的标签"First Name" ,我们可以将它写在资源包中,在适当的地方通过Struts标签简单的进行引用: 这样做将会让你对程序的更改变的简单容易,你不必在每一个JSP页面里更改标签的内容了。 用法 使用消息资源包需要你做下面的事情: 1. 为你想要支持的地方创建一个消息资源包。 创建资源包 MessageResources 类的默认的实现是一个包含"key=value" 对的文件,下面的一个消息资源包文件的例子。 大括号包围的整数是对java.text.MessageFormat 类的支持,程序员可以向value字符串中传递参数,对每个value字符串你最多可以传递4个参数。 配置 有两种途径通知Struts你的资源包的位置:web.xml 文件或者struts-config.xml 文件。首先来看web.xml 文件的配置: 这个配置说明你的资源包的名字是ApplicationResources.properties,它位于 com.systemmobile.example 包中。后缀".properties" 是隐含的,你不必显式地写出来。如果你还有另一个资源文件在相同的包中,例如ApplicationResources_fr.properties ,用来支持法语,你只需要象上面定义的那样列出文件名字即可。 定义资源文件的第二中方法(上面已经提到),是在struts-config.xml 文件中配置: 属性parameter 是必须的。和在web.xml文件中配置一样, 需要注意的是文件在包中的位置。 使用struts-config.xml 文件来配置消息资源文件是推荐的做法,因为它更有可扩展性,更灵活。 资源文件放在哪里 关于资源文件最常见的问题是将资源文件放在WAR文件的哪里。简单的回答是该文件必须放在你的classpath下面,这意味着将资源文件放在一个 JAR 文件中,或者放在/WEB-INF/classes 目录极其子目录下。下表给出了资源文件的位置,在message-resources 标签中"parameter" 属性的值以及简短的说明。 Tags 最常用Struts 标签是bean:message 标签。使用这个标签的"key" 可以从资源文件中读特定的消息资源。你还可以传入四个参数中的一个或全部: html:message 可以让你向用户显示错误信息(默认)或消息信息,而html:errors 只显示错误信息。很明显,错误信息或消息信息一定要保存在request里,否则就什么也不会显示。这里有一个显示消息信息的例子: 还有一些标签也有限地支持消息资源,比如html:link。html:link标签通过定义"titleKey" 属性来显示标题文本。许多html 使用 "altKey" 属性从资源文件里获得alternate(替代)文本。 Actions 你还可以在Action 类中使用消息资源文件。Action 类有两个方法得到一个MessageResource 类的实例: MessageResources类可以让你从资源文件中得到本地化的消息。The API for MessageResources 可以在资源中找到。比较常用的方法有: 这些返回的字符串可以被设置成request 或 session 的参数并串会表现层。你可能注意到了一些重载方法getMessage(...) 选择了参数Object,而另外一些采用了参数arg0...arg3。这和 bean:message arg0...arg3 属性等价。 除了MessageResources 类,还有一些类使用了资源文件。ActionMessage类被用来从action 向JSP之间传递消息资源中的keys 。消息被用来作为bean 的属性。ActionError, ActionMessage的子类,使用消息资源中的keys 存储验证失败后的错误信息。 国际化 从资源文件中提取一个本地化信息可以由类MessageResources 来处理,或者由它的直接子类PropertyMessageResources类处理。既然类PropertyMessageResources 等经常地被用到,那么我们就来看看它是怎样使用getMessage(Locale, String) 方法来从资源文件中读取消息的。 举例说明: 1. 如果你在ApplicationResources_pt_br.properties (Brazilian Portuguese)中没有发现消息的定义,系统将在ApplicationResources_pt.properties 文件中找,如果ApplicationResources_pt.properties 文件不存在或者也没有该消息,那就去ApplicationResources.properties 文件里查找了。 JSTL JSTL (JavaServer Pages Standard Tag Library) 的fmt标签最近开始流行起来,用来向JSP中显示资源文件的信息。它能很好地和Struts结合在一起。使用它非常简单,只要下载JSTL 的jar 文件和TLDs 并把它们拷贝到你的应用的正确的位置,然后在web.xml文件中加入下面的内容: 上面的配置是假定你的ApplicationResources.properties文件是放在/WEB-INF/classes 目录下的。 参见above 更多情况。 然后将这个标签库直接放在你的JSP中: 最后,下面的标签将显示资源文件的内容: 还有一个使用fmt 标签获得资源的例子。(注意: 该段程序取自Jakarta JSTL examples。) 结论 在向JSP文件方便地传递消息的同时,Struts使用消息资源文件还帮助我们创建国际化的Web应用。我们既可以使用正在快速发展中的JSTL标 签,也可以使用Struts标签,或直接在action中得到一条具体的消息。我希望这篇文章为您阐明了一些Struts中常用的但有时会混淆的东西。<bean:write key="label.first.name"/>
2. 配置WEB应用,加载消息资源包。
3. 使用相应的JSP标签加载资源或者...
4. ...在一个Action类中加载资源。label.username=Username
label.password=Password
label.first.name=First Name
label.last.name=Last Name
label.email=Email Address
label.phone.number=Phone Number
label.welcome=Welcome back {0} {1}!
error.min.length=The input must be at least {0} characters in length.
error.max.length=The input cannot be longer than {0} characters in length.
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<init-param>
<param-name>
application
</param-name>
<param-value>
com.systemmobile.example.ApplicationResources
</param-value>
</init-param>
</servlet>
<message-resources parameter="com.systemmobile.example.ApplicationResources"/>
<message-resources key="myResources" parameter="com.systemmobile.example.
ApplicationResources"/>
<message-resources key="moreResources" parameter="com.systemmobile.example.
MoreApplicationResources"/>
然后你必须这样使用bean:message 标签:
<bean:message bundle="moreResources" key="some.message.key"/>
<message-resources parameter="com.systemmobile.example.ApplicationResources" null="false"/>
Resources Location
parameter Value
Description
/WEB-INF/classes/ApplicationResources.properties
ApplicationResources
文件放在classes 目录下, 该目录在web应用的classpath中.
/WEB-INF/classes/resources/ApplicationResources.properties
resources.ApplicationResources
该文件放在"resources" 目录下, 所以包名也就是路径名要给出。
In the app.jar file, in the com.systemmobile.example package/directory.
com.systemmobile.example.ApplicationResources
文件在JAR文件中的全路径。
<bean:message key="label.password"/>
<bean:message key="error.min.length" arg0="6"/>
<bean:message key="label.welcome" arg0="Ralph" arg1="Nader"/>
<logic:messagesPresent message="true">
<html:messages id="msg" message="true">
<div class="success">
<bean:write name="msg"/>
</div><br/>
</html:messages>
</logic:messagesPresent>
// 返回一个request里的资源文件
protected MessageResources getResources(HttpServletRequest request);
// 返回一个request里的资源文件,
// 该资源文件的标志上<message-resources/> 元素的内容
protected MessageResources getResources(javax.servlet.http.HttpServletRequest request,
java.lang.String key);
// these methods load a resources key for the given locale
public String getMessage(java.util.Locale locale, java.lang.String key);
public String getMessage(java.util.Locale locale, java.lang.String key,
java.lang.Object arg0);
public String getMessage(java.util.Locale locale, java.lang.String key,
java.lang.Object[] args);
public String getMessage(java.util.Locale locale, java.lang.String key,
java.lang.Object arg0, java.lang.Object arg1)
public String getMessage(java.util.Locale locale, java.lang.String key,
java.lang.Object arg0, java.lang.Object arg1, java.lang.Object arg2);
public String getMessage(java.util.Locale locale, java.lang.String key, java.lang.Object arg0,
java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3);
// these methods load a resources key for the locale retrieved
// from the HttpServletRequest
public String getMessage(java.lang.String key);
public String getMessage(java.lang.String key, java.lang.Object arg0);
public String getMessage(java.lang.String key, java.lang.Object[] args);
public String getMessage(java.lang.String key, java.lang.Object arg0,
java.lang.Object arg1);
public String getMessage(java.lang.String key, java.lang.Object arg0,
java.lang.Object arg1, java.lang.Object arg2);
public String getMessage(java.lang.String key, java.lang.Object arg0,
java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3);
2. 如果消息找到了,它就被加到本地化的缓存中并返回java.lang.String型数据。
3. 如果消息没有找到,此时如果returnNull 属性被为默认的true,将返回 null。 否则将返回类似 ???key??? 的字符串,key 就是那个被传递的参数。<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>ApplicationResources</param-value>
</context-param>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<fmt:message key="label.first.name"/>
// loading a resource from a specific bundle and populating a parameter
<fmt:message key="currentTime" bundle="${deBundle}">
<fmt:param value="${currentDateString}"/>
</fmt:message>
// using the forEach iterator to populate paramters
<fmt:message key="serverInfo" bundle="${deBundle}">
<c:forEach var="arg" items="${serverInfoArgs}">
<fmt:param value="${arg}"/>
</c:forEach>
</fmt:message>
发表评论
-
struts1.x和2.x的线程安全
2012-02-15 15:18 890线程安全是每个多线程 ... -
Struts2和1的异同点
2012-02-06 16:06 731不同点: FormBean被Action属性取代 Acti ... -
Struts1和Struts2的区别
2012-02-06 11:04 1310在Web.xml中配置分发器。Struts1使用ActionS ... -
Validator自动校验数据
2012-02-03 14:56 1503除了Form Bean中的validate()方法,Strut ... -
struts1.2上传文件
2012-02-02 15:29 1007struts提供了<html:file>标签,集成 ... -
getGeneratedKeys()使用情况
2011-12-31 16:31 2085getGeneratedKeys()只能在sqlserver或 ... -
struts1需要注意的一些问题
2011-12-30 16:42 9571.struts的控制器:org.apache.strut ... -
struts 使用POJO应注意的一点
2011-12-28 13:40 901对于提交数据比较多的表单,为了避免大量地在FormBean里面 ... -
Struts页面时间格式
2011-12-28 10:20 1170当jsp页面有时间项的时候,除了传递正确格式的时间项外,即传递 ... -
ActionResources_zh_CN.properties Not Found.
2011-12-26 20:26 829控制台报警告:2009-06-30 16:08:02,76 ...
相关推荐
### Struts2资源配置详解 #### 一、Struts2国际化资源加载顺序 在Struts2框架中,国际化资源文件的加载顺序非常重要,它决定了当框架查找特定语言环境下的资源时,将按照怎样的顺序去匹配资源文件。Struts2遵循...
对于Struts2项目,资源文件需要放置在`src`目录下,并在`struts.xml`配置文件中声明资源包,例如添加 `<constant name="struts.custom.i18n.resources" value="app"></constant>`,这样Struts2就会自动加载资源文件...
Struts2的国际化处理更加灵活,它支持动态资源加载和更丰富的配置选项。 1. **资源文件**:与Struts1类似,也需要创建多个`.properties`文件,但Struts2可以使用Spring的`MessageSource`接口,这允许更高级的配置和...
-- 国际化资源配置 --> </struts-config> ``` - **web.xml**:作为Servlet容器的部署描述符,配置Struts1的初始化参数和过滤器。例如: ```xml <servlet-name>action <servlet-class>org.apache.struts....
- 初始化参数通常包括`configuration`、`resources`等,用以指定Struts2运行所需的资源位置和配置。 ##### 2. **资源文件配置** - **MessageResources**:Struts2中用于管理国际化消息的接口。 - **...
- `constant`元素用于在struts.xml中设置框架属性,例如配置国际化资源。 7. **结果类型(Result Types)和结果(Results)** - `result-types`定义自定义的结果类型。 - `global-results`是全局结果,适用于包...
- `<message-resources>`: 国际化资源文件配置。 - `<plug-in>`: 插件配置。 ##### 2. 关键配置项 - **`<form-bean>`**: - 定义表单Bean的属性和验证规则。 - **`<action-mapping>`**: - 映射Action的执行逻辑...
在`strutsI18N`这个压缩包中,可能包含了实现Struts国际化的一个示例项目,包括了上述提到的资源文件、配置文件以及相关的Action类和JSP页面。通过分析这个项目,开发者可以更深入地理解Struts的国际化机制,并将其...
在Struts的配置文件(如`struts-config.xml`)中,你需要声明资源文件的位置,通常使用`<message-resources>`标签。例如: ```xml <!-- 资源文件 --> <message-resources parameter="struts.ApplicationResources" ...
该文件主要用来存储一些Struts2的核心配置属性,通过键值对的方式设置框架的行为模式、国际化设置以及其他高级配置等。 #### struts.properties文件的作用 `struts.properties`文件通常位于项目的`WEB-INF/classes...
Struts2支持资源文件来实现国际化,即使在零配置下,我们仍然可以使用`@Text`注解来获取资源文件中的文本。 7. **错误和异常处理**: 可以通过`@ExceptionHandler`和`@ActionError`注解来处理Action中的异常和...
Struts2框架提供了强大的自定义标签支持,结合国际化全局资源配置,可以实现多语言环境下的动态页面展示。 首先,我们来了解一下自定义Tag标签的创建过程。在Java中,自定义标签通常基于JSP标准标签库(JSTL)的Tag...
在Struts2中,资源配置文件和国际化(i18n)是两个非常重要的概念,它们对于创建多语言支持和提供用户友好的界面至关重要。 资源配置文件通常以.properties为扩展名,它们存储了应用中的静态文本,如错误消息、提示...
### Struts中文问题与国际化问题——终极解决方案深度解析 #### 引言 在Web应用开发中,特别是使用Struts框架时,中文显示和国际化(Internationalization,简称i18n)问题是开发者常遇的挑战。本文将深入探讨解决...
在实际项目中,你可能需要根据业务需求进行更复杂的配置,如国际化、数据校验、主题等。熟练掌握这些配置能够帮助开发者更好地控制应用程序的流程,提升开发效率,同时确保应用的稳定性和扩展性。因此,对`struts....
你也可以在`struts.xml`配置文件中添加`<constant>`标签,例如`<constant name="struts.custom.i18n.resources" value="globalMessages"></constant>`,这样在服务器加载`struts.xml`时,也会加载国际化资源文件。...
- **资源文件支持**:Struts 1.2 支持将国际化资源存储在 `.properties` 文件中,每个文件对应一个特定的 `Locale`。 - **标签库**:Struts 1.2 提供了一系列用于显示和处理国际化内容的标签,如 `<s:text>` 标签...
总之,Struts2的国际化配置主要涉及资源文件的创建、Action类的修改、Struts2配置文件的更新以及JSP页面的适配。通过这些步骤,你可以为全球用户提供符合他们语言习惯的应用体验。记得在实际开发中,不断测试和优化...
10. **国际化支持**:Struts2支持多语言,可以通过配置资源文件来实现。在`struts.properties`或`struts.xml`中指定资源文件的路径。 以上就是关于Struts2配置文件的详细讲解,包括核心配置文件`struts.xml`的使用...