================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. 【剑指Offer】31、从1到n整数中1出现的次数

      题目描述:   求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他 ...

  2. VBS正则表达式

    删除字符串中指定的内容 Dim pathStr, newPathStr pathStr = "c:\windows;%My%\tool;e:\test;%Tg%\ff;d:\mm" ...

  3. linux配置Jdk1.8

    Jdk1.8:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html cd /usr/ ...

  4. Python学习笔记之文件处理

    1.打开和关闭 要打开文件可以使用函数 open(),它位于自动导入模块 io 中.函数将文件名作为唯一不可缺少的函数,并返回一个文件对象.它还有一个名叫 mode 的参数,用于指定文件模式,其可取值 ...

  5. maven 自动部署到tomcat

    使用maven的自动部署功能可以很方便的将maven工程自动部署到远程tomcat服务器,减少部署时间,方便快捷. 一.配置tomcat manager 1.编辑tomcat目录下,conf/tomc ...

  6. Ruby对象、变量和常量

    Ruby操作的数据主要有部分:对象.类.变量.常量. 对象 在Ruby中表示数据的基本单位称为对象,在Ruby中一切都是对象. 经常使用对象: 数值对象 2.3.14.-5等表示数字的对象,另外还有矩 ...

  7. OSX: 安装打印机的有用命令行

    事实上非常easy.就是有用lpadmin命令,以下给出一个样例: printername="YOUR_PRINTER_NAME" location="LOCATION ...

  8. BAT常问问题总结以及回答(多线程回答一)

    多线程 什么是线程?     进程概念:进程是指运行中的应用程序,每个进程都有自己独立的地址空间(内存空间),比如用户点击桌面的IE浏览器,就启动了一个进程,操作系统就会为该进程分配独立的地址空间.当 ...

  9. Flex布局 Flexbox属性具体解释

    原文:A Visual Guide to CSS3 Flexbox Properties Flex布局官方称为CSS Flexble Box布局模型是CSS3为了提高元素在容器中的对齐.方向.顺序,甚 ...

  10. 【C语言】编写函数,将一个数的指定位置置0或置1

    //编写函数,将一个数的指定位置置0或置1 #include <stdio.h> unsigned int set_bit(unsigned int num, int pos, int f ...