zoukankan      html  css  js  c++  java
  • struts2学习笔记(二)

    一. 国际化的目标

    1). 如何配置国际化资源文件

    I. Action 范围资源文件: 在Action类文件所在的路径建立名为 ActionName_language_country.properties 的文件
    II. 包范围资源文件: 在包的根路径下建立文件名为 package_language_country.properties 的属性文件,
    一旦建立,处于该包下的所有 Action 都可以访问该资源文件。注意:包范围资源文件的 baseName 就是package,不是Action所在的包名。
    III. 全局资源文件
    > 命名方式: basename_language_country.properties
    > struts.xml <constant name="struts.custom.i18n.resources" value="baseName"/>

    IV. 国际化资源文件加载的顺序如何呢 ? 离当前 Action 较近的将被优先加载.

    假设我们在某个 ChildAction 中调用了getText("username"):

    (1) 加载和 ChildAction 的类文件在同一个包下的系列资源文件 ChildAction.properties
    (2) 加载 ChildAction 实现的接口 IChild,且和 IChildn 在同一个包下 IChild.properties 系列资源文件。
    (3) 加载 ChildAction 父类 Parent,且和 Parent 在同一个包下的 baseName 为 Parent.properties 系列资源文件。
    (4) 若 ChildAction 实现 ModelDriven 接口,则对于getModel()方法返回的model 对象,重新执行第(1)步操作。
    (5) 查找当前包下 package.properties 系列资源文件。
    (6) 沿着当前包上溯,直到最顶层包来查找 package.properties 的系列资源文件。
    (7) 查找 struts.custom.i18n.resources 常量指定 baseName 的系列资源文件。
    (8) 直接输出该key的字符串值。


    2). 如何在页面上 和 Action 类中访问国际化资源文件的 value 值

    I. 在 Action 类中. 若 Action 实现了 TextProvider 接口, 则可以调用其 getText() 方法获取 value 值
    > 通过继承 ActionSupport 的方式。

    II. 页面上可以使用 s:text 标签; 对于表单标签可以使用表单标签的 key 属性值
    > 若有占位符, 则可以使用 s:text 标签的 s:param 子标签来填充占位符
    > 可以利用标签和 OGNL 表达式直接访问值栈中的属性值(对象栈 和 Map 栈)

    time=Time:{0}

    <s:text name="time">
    <s:param value="date"></s:param>
    </s:text>

    ------------------------------------

    time2=Time:${date}

    <s:text name="time2"></s:text>

    3). 实现通过超链接切换语言.

    I. 关键之处在于知道 Struts2 框架是如何确定 Local 对象的 !
    II. 可以通过阅读 I18N 拦截器知道.
    III. 具体确定 Locale 对象的过程:

    > Struts2 使用 i18n 拦截器 处理国际化,并且将其注册在默认的拦截器栈中
    > i18n拦截器在执行Action方法前,自动查找请求中一个名为 request_locale 的参数。
    如果该参数存在,拦截器就将其作为参数,转换成Locale对象,并将其设为用户默认的Locale(代表国家/语言环境)。
    并把其设置为 session 的 WW_TRANS_I18N_LOCALE 属性
    > 若 request 没有名为request_locale 的参数,则 i18n 拦截器会从 Session 中获取 WW_TRANS_I18N_LOCALE 的属性值,
    若该值不为空,则将该属性值设置为浏览者的默认Locale
    > 若 session 中的 WW_TRANS_I18N_LOCALE 的属性值为空,则从 ActionContext 中获取 Locale 对象。

    IV. 具体实现: 只需要在超连接的后面附着 request_locale 的请求参数, 值是 语言国家 代码.
    <a href="testI18n.action?request_locale=en_US">English</a>
    <a href="testI18n.action?request_locale=zh_CN">中文</a>

    > 注意: 超链接必须是一个 Struts2 的请求, 即使 i18n 拦截器工作!

  • 相关阅读:
    Http请求头和相应头分析
    linux扩充容量经典篇
    Redis持久化以及其原理
    redis简单应用
    Python Requests库使用2:请求方法
    加快访问GitHub的速度
    GET和POST两种基本请求方法的区别
    Python Requests库介绍
    Python urllib、urllib2、urllib3用法及区别
    Django中操作cookie和session
  • 原文地址:https://www.cnblogs.com/tandy/p/5049882.html
Copyright © 2011-2022 走看看