================Struts2的国际化================
程序国际化:
  程序可以根据极其所在的国家、语言环境,自动显示当前国家、语言的内容
国际化的本质是:查找、替换
国际化的步骤:
  (1)为不同的国家、语言环境提供资源包;
  如果你的国际化语言资源包中有非西欧的字符,要使用native2ascli命令处理该文件;
  (2)在程序中输出的国际化的消息key;
Struts2的国际化:
    (1).支持模块化加载;
    (2).Struts2支持自动加载国际化资源
  1.JSP页面的国际化:
    A.需要手动加载国际化消息:
    使用<s:i18n .../>;
    B.在页面使用<s:text .../>根据key来输出国际化消息:
    如果是表单标签,直接使用key来指定国际化消息的key;
  2.Action的国际化:
    A.自动加载国际化消息
    让国际化消息的baseName与Action的类名相同(Login_zh_CN.properties),而且放在同一个目录下
    B.在Action类中调用getText()(可传入参数,类似{1}替换(*)方法,必须为数组)方法来加载国际化消息;
  3.包范围的国际化:
    A.自动加载国际化消息
    让国际化消息的baseName与package(不是与包名相同),而且放在同该包的目录下面
    可以让该包下面的所有Action共享同一个国际化资源文件;
    B.在Action类中调用getText()方法来加载国际化消息;
  4.全局国际化资源文件:
    A.通过一个struts.custom.i18n.resources常量来加载国际化资源;
    B.全局国际化资源文件,即可被Action访问,也可以被JSP页面访问;

  /***************************************
  Action接口与ActionSupport实现类:
  ActionSupport实现 Action接口。
  而且增加了校验支持、国际化支持等功能;
  ***************************************/

Struts2的异常处理:
  传统的web编程的异常模式:
  try
  {
  业务代码;
  }
  catch(XxxException xe)
  {
  Forward("/a.jsp");
  }
  ...

  对于Action的处理方法而言,处理结果可能出现如下情况:
    1.正常执行结束,会返回一个String类型的逻辑视图;
     对于String类型的逻辑试图,使用<result name="逻辑视图名">物理视图资源</result>
    2.遇到异常,返回一个异常对象:
     <exception-mapping exception="异常类" result="逻辑视图名"/>
  Struts2的异常配置的本质:
    为不同的异常类,“起一个”逻辑视图名;
  Struts设计的处理方法完全不需要处理任何异常,它可以声明抛出任意的异常;并显示异常提示;

Java领域的MVC框架:
  - 主要实现控制器。(StrutsPrepareAndExecuteFiter + Action)
  - 提供大量标签库,可以简化View的开发。

==================OGNL表达式==================
    回顾JSP 2 EL - 做数据访问的工具,并不是编程语言,因此必然简单;
    EL提供了11个内置对象:
    pgeContext pageScope requestScope sessionScope applicationScope
    param paramValues header headerValues cookie initParam(获取Web应用的配置参数)

  OGNL
    既然要访问数据库,必然有个东西装数据:
      OGNL的装数据的东西叫"Stack Context(OGNL Context)"
      --可以理解它相当于一个Map
  1.它里面的每个对象,都应该有个名字,根据名字来访问:
      #对象名
    假如OGNL Context中有3个对象:foo、bar、test
      #bar.abc - 访问bar对象的getAbc()返回值;
      #test.xyz.abc.def - 访问test对象的getXyz().getAbc().getDef()
  2.OGNL Context中有个根(root)对象:
    如果我们要访问根(root)对象的属性,可以省略对象名
    假如OGNL Context中有3个对象:foo、bar、test,但bar是根对象
      abc.xyz.def - 访问bar.getAbc().getXyz().getDef()

  /******************context map******************

          |--application
          |--session
          |--value stack(root)
  context map--- |--action (the current action)
          |--request
          |--parameters
          |--attr (searches page, request, session, then application scopes)

  Stack Context(OGNL Context/Context Map/Action Context)

  ValueStack

  Stack Context中包含了ValueStack(根对象)

  ************************************************/
  3.OGNL可以直接创建List对象:{ele1,ele2,ele3,ele3 ....}
  4.OGNL可以直接创建Map对象:#{key1:value1,key2:value2,key3:value3...}
  5.OGNL还可以直接获取"子集合"
      person.cats.{?#this.age>2} - 获取person所养的猫中age大于2的所有猫;
      person.cats.{^#this.age>2} - 获取person所养的猫中age大于2的第一个猫;
      person.cats.{$#this.age>2} - 获取person所养的猫中age大于2的最后一个猫;
  6.OGNL还可以直接调用静态成员:
    - 需要将struts.ognl.allowStaticMethodAccess常量设置为true才可
      类名@静态Field
      类名@静态方法(参数值)

OGNL标签库:

  【参见Struts2官方API】

  控制标签:
    if/elseif/else -模拟流程控制的分支
    iterator -模拟流程控制的迭代
    append/merge - 把两个或N个已有的集合合并成新的集合
    merge - 分割出集合
    sort - 对集合元素排序,需要指定一个Comparator
    subset - 截取子集合
  数据标签:
    set - 设置变量值:var指定变量名字,value指定变量值,scope指定范围
    bean - 创建一个Bean对象:var指定对象名(Stack Context中),name指定实现类
    debug - 帮助调试,可以让开发者观察ValueStack以及Stack Context中的数据
    i18n - 为指定页面加载国际化资源文件,name指定国际化资源包的baseName
    text - 输出国际化消息,也通过name指定国际化消息的key
    property - 输出表达式的值,通过value属性来指定表达式,
          如果没有指定value属性,将直接暑促ValueStack栈顶的元素
    action - 可以直接在页面上调用指定Action,
         可以直接把Action的处理结果包含到本页面中
      name和namespace确定调用哪个Action
      var:指定将被调用的Action放入Stack Context(官方文档是错误的)
     * executeResult:指定是否把被调Action的处理结果完全包含到当前页面中
     * ignoreContextParams:控制当前页面请求参数,是否传入被调的Action
        功能是比较有用的:假如进入到一个添加用户的页面:
        用户名: □□□□□□□
        密码: □□□□□□□
        性别: □□□□□□□ <s:action var="genders" "name=listGender"/>
        学历: -下拉列表- 来自于系统的数据库中的数据
        籍贯: -下拉列表-<s:action var="jiguans" name="listJiguans"/>
    date - 对日期进行格式化输出
      name:指定要格式化输出的日期
      format:格式化字符串
      nice:输出该日期与当前日期的时间差
    include - 用于包含指定的JSP页面
    param - 用于设置参数
    push - 把表达式的值放入ValueStack的栈顶(可以方便直接获取栈顶元素,因此性能更好)
      当我们的对象所在的对象图”很深“时,可以将该对象”推入“ValueStack的栈顶

Struts2学习笔记 - Part.02的更多相关文章

  1. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  2. Struts2学习笔记⑧

    今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...

  3. Struts2学习笔记①

    Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...

  4. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  5. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) -- 样例(6)

    managed-schema 样例: <?xml version="1.0" encoding="UTF-8" ?> <!-- License ...

  6. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml)(3)

         5. <fieldType> fieldType主要定义了一些字段类型,其name属性值用于前面<field>中的type属性的值.e.g. <fieldTyp ...

  7. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) - filter(5)

    自定义fieldType时,通常还会用到filter.filter必须跟在tokenizer或其它filter之后.如: <fieldType> <analyzer> < ...

  8. Python--网络编程学习笔记系列02 附:tcp服务端,tcp客户端

    Python--网络编程学习笔记系列02 TCP和UDP的概述: udp通信模型类似于写信,不需要建立相关链接,只需要发送数据即可(现在几乎不用:不稳定,不安全) tcp通信模型类似于打电话,一定要建 ...

  9. 驱动开发学习笔记. 0.02 基于EASYARM-IMX283 烧写uboot和linux系统

    驱动开发读书笔记. 0.02 基于EASYARM-IMX283 怎么烧写自己裁剪的linux内核?(非所有arm9通用) 手上有一块tq2440,但是不知道什么原因,没有办法烧boot进norflas ...

随机推荐

  1. TensorFlow实战笔记(17)---TFlearn

    目录: 分布式Estimator 自定义模型 建立自己的机器学习Estimator 调节RunConfig运行时的参数 Experiment和LearnRunner 深度学习Estimator 深度神 ...

  2. vue中访问数据接口的配置

    业务API接口地址: http://localhost:3816/api/ 前端UI浏览地址:http://127.0.0.1:8080/#/home 由于同源策略的问题: 需要配置代理: 在开发环境 ...

  3. Spring MVC学习总结(4)——SpringMVC权限管理

    1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServlet.     DispatcherServl ...

  4. 关于c对文件的操作

    要求从键盘输入给定文件的路径,要求将他中的内容读取出来并输入到你需要建的一个文本文档中还要从键盘输入到建的一个文本文当中 #include <stdio.h> int main() { F ...

  5. DJANGO之自定义模板过滤器

    我查找了DJANGO模板的过滤器,好像指定字符串包含指定关-键字符的过滤器没有呢, 没有硬着头-皮,按网上其它人的作法,写了一个,成功了...:) 参考URL: http://liuzhijun.it ...

  6. [bzoj1212][HNOI2004]L语言_AC自动机_动态规划

    L语言 bzoj-1212 HNOI-2004 题目大意:给你一个n个单词的集合,然后给你m条字符串.问每条字符串可以被理解的最长前缀.被理解当且仅当存在一种分割使得每一段都是集合里的元素. 注释:$ ...

  7. Apache vs. Nginx

    精简版 Apache:出名比较早,09年左右是最流行的时期,功能强大,可以根据需求配置为基于进程,基于线程或者基于事件的,但是消耗内存较多,对硬件需求较高,内存是影响服务器性能的最关键因素,在VPS上 ...

  8. 这是一个文字游戏?“这个工作你们部门牵头xx”

    近期集团一个部门在联系做一个网上应用平台系统.经过几次的会议沟通,这个原本就是解决取消个人银行卡收款的需求慢慢变成了一个在线销售加收款平台,因为其对销售的业务不熟悉,现有又有应用的软件,他们也感觉到主 ...

  9. UVALive3938 &quot;Ray, Pass me the dishes!&quot; 线段树动态区间最大和

    AC得相当辛苦的一道题.似乎不难,可是须要想细致, 開始的时候的错误思路----是受之前做过的区间最长连续子串影响http://blog.csdn.net/u011026968/article/det ...

  10. Java中Void占位符的測试及个人理解

    Java对Void类的说明是:Void 类是一个不可实例化的占位符类,它保持一个对代表 Java keyword void 的 Class 对象的引用. 代表的是: 代表主要的 Java 类型 voi ...