================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. MySQL的EXPLAIN命令用于SQL语句的查询执行计划

    MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提供任何调整建议,但它能够提供重要的信息 ...

  2. C++ 资源大全中文版

    标准库 C++标准库,包括了STL容器,算法和函数等. C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分. Standard Tem ...

  3. [模板]FFT

    郝神并没有令我明白这个. 但是巨神的题解太强了. #include <iostream> #include <complex> #include <cmath> # ...

  4. java 反射之获取泛型对象的所有字段与对应的值(包括父类的)

    上代码: public static void main(String[] args) throws IntrospectionException { SysUser obj = new SysUse ...

  5. CodeForces 396C On Changing Tree

    On Changing Tree Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces ...

  6. UVA Jin Ge Jin Qu hao 12563

    Jin Ge Jin Qu hao (If you smiled when you see the title, this problem is for you ^_^) For those who ...

  7. Eclipse安装Jetty插件(Web容器)

    Eclipse除了安装Tomcat插件外,还可以安装Jetty,相对来说Jetty比Tomcat配置简单. Tomcat安装及配置:http://www.cnblogs.com/EasonJim/p/ ...

  8. POJ 2029

    二维树状数组可解此题 #include <iostream> #include <cstdio> #include <cstring> #include <a ...

  9. ThinkPHP模版引擎之变量输出具体解释

    ThinkPHP模版引擎之变量输出具体解释 使用ThinkPHP开发有一定时间了,今日对ThinkPHP的模板引擎变量解析深入了解了一下.做出一些总结,分享给大家供大家參考. 详细分析例如以下: 我们 ...

  10. MX2怎样利用Fiddler进行网络数据抓包

    首先须要保证PC与手机在同一局域网内或有独立公网IP, 下面以在同一局域网为例(保证手机能訪问到这台PC机器): 1. PC端配置 1). 安装Fiddler 2). 开启Fiddler下面功能:   ...