Struts2学习笔记 - Part.02
================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的更多相关文章
- Struts2 学习笔记(概述)
Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...
- Struts2学习笔记⑧
今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...
- Struts2学习笔记①
Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...
- Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)
Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...
- Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) -- 样例(6)
managed-schema 样例: <?xml version="1.0" encoding="UTF-8" ?> <!-- License ...
- Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml)(3)
5. <fieldType> fieldType主要定义了一些字段类型,其name属性值用于前面<field>中的type属性的值.e.g. <fieldTyp ...
- Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) - filter(5)
自定义fieldType时,通常还会用到filter.filter必须跟在tokenizer或其它filter之后.如: <fieldType> <analyzer> < ...
- Python--网络编程学习笔记系列02 附:tcp服务端,tcp客户端
Python--网络编程学习笔记系列02 TCP和UDP的概述: udp通信模型类似于写信,不需要建立相关链接,只需要发送数据即可(现在几乎不用:不稳定,不安全) tcp通信模型类似于打电话,一定要建 ...
- 驱动开发学习笔记. 0.02 基于EASYARM-IMX283 烧写uboot和linux系统
驱动开发读书笔记. 0.02 基于EASYARM-IMX283 怎么烧写自己裁剪的linux内核?(非所有arm9通用) 手上有一块tq2440,但是不知道什么原因,没有办法烧boot进norflas ...
随机推荐
- Java 8 集合不完全一览
JDK 8 List 名称 线程安全 数据结构 允许 null 默认初始容量 扩容策略 备注 ArrayList 不安全 数组 允许 10 1.5 * old LinkedList 不安全 双链表 允 ...
- swift-导航栏添加自定义返回按钮
//1.添加返回按钮 func addBackBtn(){ let leftBtn:UIBarButtonItem=UIBarButtonItem(title: "返回", sty ...
- 洛谷P1057 传球游戏【递归+搜索】
上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:nn个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把 ...
- POJ3253 Fence Repair【贪心】
我们的小伙伴Bingo真的很调皮,他在上课的路上看到树上有个鸟窝,他就想去把他捅下来,但是鸟窝很高他够不到,于是他就到处找木棍,想把这些木棍接在一起,然后去捅鸟窝.他一共找了N跟木棍 (1 ≤ N ≤ ...
- svn版本库更新后自动同步到www
注意:www目录一定要用SVN服务器 checkout出Repositories的代码 步骤: (1)新建www根目录 mkdir -p /data/www/lehuo (2)在www根目录下检出(c ...
- 最佳实践 | 源码升级gcc
1.下载升级包所需软件 boost_1_60_0.tar.gz http://www.boost.org/users/history/version_1_60_0.html gcc-4.8.0.tar ...
- Flask中的session操作
一.配置SECRET_KEY 因为flask的session是通过加密之后放到了cookie中.所以有加密就有密钥用于解密,所以,只要用到了flask的session模块就一定要配置“SECRET_K ...
- js给对象onclick事件赋值
1)当方法没有参数时,赋值可以直接用onclick = 方法名 window.onload = function() { $('btnTest').onclick = test; } function ...
- mysql中使用order 出现错误
- ExtJs之ExtJs.Model验证
没有搞好,但知道意思和配置,并且好像4和3的没有兼容性语法,所以网上找了新语法才出来了点东东. <!DOCTYPE html> <html> <head> < ...