- 浏览: 1210962 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (434)
- js (20)
- struts2 (77)
- spring (11)
- hibernate (17)
- ssh整合 (9)
- 程序例子 (4)
- 正则表达式 (8)
- JSP (20)
- IDE (15)
- 数据库 (10)
- 工作经验技巧感悟 (21)
- 程序员的幽默 (4)
- windows设置 (4)
- 名词解释 (4)
- 技术入门 (4)
- jFreeChart (16)
- OGNL (5)
- java基础 (46)
- dwr (4)
- portal (1)
- 示例用到的附件 (0)
- 优秀程序员45个习惯 (1)
- webService (1)
- shell (3)
- ibatis (3)
- 开发工具 (1)
- OS (3)
- xmlbean (2)
- design_pattern (0)
- error (1)
- testng (2)
- python (18)
- hadoop (21)
- mapreduce (9)
- Hive (0)
- HBase (0)
- ubuntu (22)
- 多线程 (7)
- 自我改进 (6)
- 设计模式 (1)
- ssh (2)
- ant (4)
- guake (2)
- 云计算 (9)
- hdfs (3)
- 大数据 (1)
- 电信业务 (1)
- maven (2)
- svn (5)
- UML (1)
- 待处理问题 (2)
- log4j (1)
- css (1)
- LevelDb (0)
- thrift (6)
- 辅助工具 (3)
- 算法 (1)
- tornado (0)
- twisted (1)
- jvm (0)
- 图书 (1)
- 其他 (1)
- oracle (2)
- mvn (1)
- 私人信息 (0)
- nio (1)
- zookeeper (1)
- JavaIO (3)
- mongodb (1)
- java-高级 (6)
- spring-深入 (1)
- tomcat (1)
- quartz (1)
- 面试题 (1)
- redis (3)
- EJBCA (0)
- spring-3.0 (1)
- memcache (3)
- 性能检测 (1)
- android (0)
- 开源项目 (1)
- 将博客搬至CSDN (0)
- 架构之路 (1)
最新评论
-
pjwqq:
“子类对象”都拥有了“父类对象的一个实例的引用”我晕,应该是“ ...
java继承--父类属性的存放位置 -
gwgyk:
关于楼主最后的问题,我想可能是这样:InputFormat默认 ...
eclipse 运行hadoop wordcount -
fanjf:
上述7点基本具备,可惜现在因为项目需要,做管理方面工作!
如何判断自己是否具有成为一名优秀程序员的潜质 -
摸爬滚打NO1:
链接已经失效
Eclipse添加JSEclipse 插件(js插件) -
younglibin:
看了以上7条, 自己 也不知道是否能够对上, 感觉没一点都有那 ...
如何判断自己是否具有成为一名优秀程序员的潜质
据Struts2的文档,当由action加载页面时资源文件的的搜索顺序为:
ActionClass.properties
Interface.properties (every interface and sub-interface)
BaseClass.properties (all the way to Object.properties)
ModelDriven's model (if implements ModelDriven), for the model object repeat from 1
package.properties (of the directory where class is located and every parent directory all the way to the root directory)
search up the i18n message key hierarchy itself
global resource properties
资源文件的命名:basename_language_country.properties
JAVA国际化
如果系统同时存在资源文件、类文件,系统将以类文件为主,而不会调用资源文件。
对于简体中文的Locale,ResourceBundle搜索资源的顺序是:
(1)baseName_zh_CN.class
(2)baseName_zh_CN.properties
(3)baseName_zh.class
(4)baseName_zh.properties
(5)baseName.class
(6)baseName.properties
Struts2的国际化入门
Struts2国际化是建立在Java国际化的基础上的,一样是通过提供不同国家/语言环境的消息资源,然后通过ResourceBundle
加载指定Locale对应的资源文件,再取得该资源文件中指定key对应的消息--整个过程与JAVA程序的国家化完全相同,只是
Struts2框架对JAVA程序国际化进行了进一步封装,从而简化了应用程序的国际化。
Struts2需要国际化的部分
类型转换:
数据校验:
验证框架xml配置文件的国际化:RegisterAction-validation.xml文件<message key="username.xml.invalid"/>
JSP页面的国际化:<s:text name="addUser"/>
Action的国际化:利用ActionSupport类提供的getText()方法.
Struts2中加载全局资源文件
struts.xml
<constant name="struts.custom.i18n.resources" value="baseName"/>
或
struts.properties
struts.custom.i18n.resources=baseName
访问国际化消息
Struts2访问国际化消息主要有如下三种方式:
(1)JSP页面:<s:text name="key"/>
(2)Action类中:使用ActionSupport类的getText方法。
(3)表单元素的Label里:为表单元素指定一个key属性
输出带占位符的国际化消息
Struts2中提供了如下两种方式来填充消息字符串中的占位符
(1)JSP页面,在<s:text.../>标签中使用多个<s:param.../>标签来填充消息中的占位符。
(2)Action中,在调用getText方法时使用getText(String aTextName,List args)或getText(String key, String[] args)方法来填充占位符。
除此之外,Struts2还提供了对占位符的一种替代方式,这种方式允许在国际化消息资源文件中使用表达式,对于这种方式,则可避免在使用国际化消息时还需要为占位符传入参数值。
如下在消息资源中使用表达式
succTip=${username}, 欢迎, 您已经登录!
在上面的消息资源中,通过使用表达式,可以从ValueStack中取出该username属性值,自动填充到该消息资源中。
加载资源文件的方式
(1)加载全局资源文件: <constant name="struts.custom.i18n.resources" value="baseName"/>
(2)包范围资源文件 :为Struts2指定包范围资源文件的方法是,在包的根路径下建立多个文件名为package_language_country.properties的文件,一旦建立了
这个系列的国际化资源文件,应用中处于该包下的所有Action都可以访问该资源文件。需要注意的是上面的包范围资源文件的baseName就是package,
不是Action所在的包名。
(3)Action范围资源文件:在Action类文件所在的路径建立多个文件名为ActionName_language_country.properties的文件。
(4)临时指定资源文件:<s:i18n.../>标签的name属性指定临时的国际化资源文件
加载资源文件的顺序
Action中加载资源文件,假设我们在某个ChildAction中调用了getText("user.title"),Struts 2.0的将会执行以下的操作:
(1)优先加载系统中保存在ChildAction的类文件相同位置,且baseName为ChildAction的系列资源文件。
(2)如果在(1)中找不到指定key对应的消息,且ChildAction有父类ParentAction,则加载系统中保存在ParentAction的类文件相同位置,且
baseName为ParentAction的系列资源文件。
(3)如果在(2)中找不到指定key对应的消息,且ChildAction有实现接口IChildAction,则加载系统中保存在IChildAction的类文件相同位置,且
baseName为IChildAction的系列资源文件。
(4)如果在(3)中找不到指定key对应的消息,且ChildAction有实现接口ModelDriven(即使用模型驱动模式),则对于getModel()方法返回的model对象,
重新执行第(1)步操作。
(5)如果在(4)中找不到指定key对应的消息,则查找当前包下baseName为package的系列资源文件。
(6)如果在(5)中找不到指定key对应的消息,则沿着当前包上溯,直到最顶层包来查找baseName为package的系列资源文件。
(7)如果在(6)中找不到指定key对应的消息,则查找struts.custom.i18n.resources常量指定baseName的系列资源文件。
(8)如果经过上面的步骤一直找不到key对应的消息,将直接输出该key的字符串值。
对于在JSP中访问国际化消息,则简单的多,他们又可以分为两种形式:
(1)对于使用<s:i18n.../>标签作为父标签的<s:text.../>标签、表单标签的形式:
a、将从<s:i18n.../>标签指定的国际化资源文件中加载指定key对应的消息。
b、如果在a中找不到指定key对应的消息,则查找struts.custom.i18n.resources常量指定baseName的系列资源文件。
c、如果经过上面步骤一直找不到该key对应的消息,将直接输出该key的字符串值。
(2)如果<s:text.../>标签、表单标签没有使用<s:i18n.../>标签作为父标签:
直接加载struts.custom.i18n.resources常量指定baseName的系列资源文件。如果找不到该key对应的消息,将直接输出该key的字符串值。
允许用户自行选择程序语言
Struts2国际化的运行机制
在Struts2中,可以通过ActionContext.getContext().setLocale(Locale arg)设置用户的默认语言。
为了简化设置用户默认语言环境,Struts2提供了一个名为i18n的拦截器(Interceptor),并且将其注册在默认的拦截器中(defaultStack)。
i18n拦截器在执行Action方法前,自动查找请求中一个名为request_locale的参数。如果该参数存在,拦截器就将其作为参数,转换成Locale对象,
并将其设为用户默认的Locale(代表国家/语言环境)。
除此之外,i18n拦截器还会将上面生成的Locale对象保存在用户Session的名为WW_TRANS_I18N_LOCALE的属性中。一旦用户Session中存在一个名为
WW_TRANS_I18N_LOCALE的属性,则该属性指定的Locale将会作为浏览者的默认Locale。
<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<script. type="text/javascript">
function langSelecter_onChanged()
{
document.getElementById("langForm").submit();
}
</script>
<%-- 设置SESSION_LOCALE为用户session中的WW_TRANS_I18N_LOCALE属性值 --%>
<s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"/>
<%-- 使用lee.Locales创建locales实例 --%>
<s:bean id="locales" name="lee.Locales">
<%-- 为locales实例传入current参数值,如果SESSION_LOCALE为空,则返回ValueStack中locale属性值(即用户浏览器设置的Locale) --%>
<s:param name="current" value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"/>
</s:bean>
<%-- 让用户选择语言的表单 --%>
<form. action="<s:url/>" id="langForm"
style="background-color:#bbbbbb; padding-top: 4px; padding-bottom: 4px;">
<s:text name="languag"/>
<s:select label="Language" list="#locales.locales" listKey="value" listValue="key"
value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"
name="request_locale" id="langSelecter"
nchange="langSelecter_onChanged()" theme="simple"/>
</form>
在其他页面中包含该页面:
<s:include value="selectlanguage.jsp"/>
在struts.xml文件中增加Action通配符的配置:
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="messageResource"/>
<constant name="struts.i18n.encoding" value="GBK"/>
<package name="lee" extends="struts-default">
<!-- 使用通配符定义Action的name -->
<action name="*">
<!-- 将请求转发给/WEB-INF/jsp/路径下同名的JSP页面 -->
<result>/WEB-INF/jsp/{1}.jsp</result>
</action>
</package>
</struts>
发表评论
-
struts2 学习资料
2013-10-08 12:23 953struts2.0 系列文章 http://www.blo ... -
javaweb项目RuntimeException不能默认打印到控制台
2012-11-26 15:46 3047前几天搭建了一个框架: 配置 struts2 spring2 ... -
ajax和js实现下拉列表级联的两种方式(ajax和dwr)
2010-01-19 21:54 5832今天遇到一个问题: ... -
jsp页面用s:datetimepicker不显示时间下拉框(提示dojo未定义错误)
2010-01-15 09:49 5799在写时一定要加上:form 标签外加上<s:head t ... -
struts2中struts.xml 文件详解(中文版翻译)入门篇
2009-12-21 11:15 2125<!DOCTYPE struts PUBLIC &quo ... -
Struts2中的(Interceptor)拦截器的执行顺序
2009-12-10 15:00 5948Interceptor的接口定义没 ... -
Struts2中的拦截器的内部结构
2009-12-10 14:44 1509让我们再来回顾一下之前我们曾经用过的一张Action Life ... -
struts2 中Action的生命周期
2009-12-10 14:40 1828接下来,我们再来看看Struts2中的Action的生命周期: ... -
Struts2的Action并不带有任何Web容器相关的对象,Action又是如何工作在Web容器中
2009-12-10 14:39 2131虽然Struts2的Action只是一 ... -
Struts2中的Action 定义
2009-12-10 14:38 1350多数的MVC框架中的Control层,都是一个Java对象。按 ... -
struts2中Action的五大元素
2009-12-10 14:23 2637在大概了解了Struts2的Action后,我们来重点研究一下 ... -
jsp 向Action传值(不提交committ 也能传值)
2009-12-05 09:45 3820今天发现 当药提交表单是 页面的 字段 在Action接收不 ... -
struts2 Tooltip和radio 还有关系吗?
2009-10-12 17:19 1780今天遇到一个奇怪的问题,拿来大家看看! 我用stru ... -
jsp向action传值的几个错误一点
2009-09-23 08:36 16241. 在jsp页面首次请求时正确!通过查询可以正确显示数 ... -
struts2 标签展示 map
2009-09-21 17:59 2266从数据库中查找出来的 ... -
struts2 标签展示 map
2009-09-21 17:48 2706在jsp页面用iterator 迭代时,如果 list中放的是 ... -
struts.properties 配置解析
2009-09-11 10:45 2052### struts.properties这是一 ... -
Struts1和Struts2的区别和对比
2009-09-11 10:05 1584? Struts1要求Action类继承 ... -
el表达式函数
2009-09-11 09:48 1279<%@ taglib prefix="fn&q ... -
struts2 手动校验原理图解
2009-09-02 10:37 17411、Struts 2的类型转换器负责对客户端的字 ...
相关推荐
在Struts2框架中,国际化资源文件的加载顺序非常重要,它决定了当框架查找特定语言环境下的资源时,将按照怎样的顺序去匹配资源文件。Struts2遵循如下的加载顺序: 1. **特定国家与地区设置的资源文件**: `baseName...
6. **资源文件的支持**:Struts2提供了对国际化资源文件的支持,便于多语言应用的开发。 #### Struts2核心组件详解 - **StrutsPrepareAndExecuteFilter**:作为Struts2框架的核心过滤器,它负责初始化框架并处理...
在Struts2中,配置文件起着至关重要的作用,它们定义了框架的行为、拦截器、对象工厂、类型检测以及动作映射等关键组件。下面将详细解析Struts2的主要配置文件。 1)struts-default.xml 这是Struts2框架默认加载的...
- 动作类的搜索顺序遵循一定的规则,通常情况下,Struts2会根据配置文件中的顺序来查找对应的动作类。 通过以上内容,我们可以了解到Struts2作为一个成熟的MVC框架,在项目开发中扮演的重要角色。从环境搭建到第一...
拦截器是Struts2中的核心组件之一,它可以在Action执行前后进行拦截操作,比如验证用户输入、记录日志等。 5. **Action执行**:一旦通过了所有的拦截器,Action就会被执行。Action执行的结果通常是一个视图,如JSP...
12. 国际化:Struts2支持多语言环境,通过资源文件(如.properties或.properties.xml)管理不同语言的文本,根据用户浏览器的设置动态加载相应的语言资源。 十、表单验证 13. 表单验证:Struts2提供了强大的表单...
每个被包含的文件都应遵循struts.xml的格式,配置文件按顺序加载。 4. **Interceptor configuration**: 拦截器是Struts2中的关键组件,用于在Action方法调用前后执行额外的逻辑。拦截器有许多用途,如验证、属性...
本资源包含的是《Struts2权威指南》一书所配套的源码,但不包括JAR文件。了解并学习这些源码,可以帮助开发者深入理解Struts2的工作原理和内部机制。 Struts2的核心组件包括: 1. **Action**:Action是业务逻辑的...
输入校验的流程在Struts2中是结构化的,涉及多个步骤: 1. **类型转换**:首先,Struts2框架使用类型转换器将HTTP请求中的字符串参数转换为相应的Java类型,如Integer、Date等,并将这些值设置为Action类的属性。 ...
OGNL是Struts2中的表达式语言,用于在Action对象和视图之间传递数据。它可以方便地访问和修改对象的属性,甚至执行复杂的表达式。 6. **Plug-in机制**: Struts2支持插件机制,允许开发者扩展框架功能,如自定义...
- **Action**:在Struts2中,Action是业务逻辑的载体,它接收来自视图层的请求,处理数据并返回一个Result。开发者可以自定义Action类,实现特定的业务逻辑。 - **Result**:Result表示Action执行后返回的结果,它...
- **配置文件较多:**虽然 STRUTS2 提供了 XML 和注解两种配置方式,但在实际开发中仍然需要编写大量的配置信息。 - **配置文件理解难度大:**对于初学者来说,理解这些配置文件的作用和意义可能需要花费一定的...
- **加载资源文件的顺序**:配置资源文件的加载顺序。 - **允许用户自行选择程序语言**:通过表单选择语言,动态改变页面的语言显示。 #### 五、整合其他框架 **5.1 为Struts2整合Spring作准备** - **目的**:将...
Struts2是一个强大的Java web应用程序开发框架,它简化了MVC(模型-视图-控制器)设计模式的实现,提供了一种组织应用结构和处理...在实际项目中,结合Struts2的扩展性和丰富的社区资源,可以更好地应对各种复杂需求。
9. **开发文档**:包含在压缩包中的开发文档是理解Struts2框架的重要资源,它详细介绍了每个组件的工作原理、配置选项以及最佳实践。 通过学习和使用Struts2的核心包,开发者可以深入理解MVC架构,掌握Java Web开发...
10. **国际化(Internationalization, I18n)**:Struts2支持多语言环境,通过资源包(properties文件)管理不同语言的文本。 在导入"lib2"这个压缩包后,确保将其添加到项目的类路径(Classpath)中,以便Eclipse...