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 ...
随机推荐
- TensorFlow的序列模型代码解释(RNN、LSTM)---笔记(16)
1.学习单步的RNN:RNNCell.BasicRNNCell.BasicLSTMCell.LSTMCell.GRUCell (1)RNNCell 如果要学习TensorFlow中的RNN,第一站应该 ...
- 【剑指Offer】33、丑数
题目描述: 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数 ...
- BZOJ 3744 Gty的妹子序列 (分块+树状数组+主席树)
题面传送门 题目大意:给你一个序列,多次询问,每次取出一段连续的子序列$[l,r]$,询问这段子序列的逆序对个数,强制在线 很熟悉的分块套路啊,和很多可持久化01Trie的题目类似,用分块预处理出贡献 ...
- CentOS7.2 多个python版本共存
1.查看是否已经安装Python CentOS 7.2 默认安装了python2.7.5 因为一些命令要用它比如yum 它使用的是python2.7.5. 使用python -V命令查看一下是否安装P ...
- elasticsearch 权威指南搜索阅读笔记(四)
多索引多type搜索 分页搜索 每页5条 查询一到3页数据 第一页:http://127.0.0.1:9200/blogs2/product/_search?size=5&from=0 第二页 ...
- Disruptor使用
Disruptor作者,介绍Disruptor能每秒处理600万订单.这是一个可怕的数字. disruptor之所以那么快,是因为内部采用环形队列和无锁设计.使用cas来进行并发控制.通过获取可用下标 ...
- nyoj 711 枚举+并查集
#include<stdio.h>//从大到小不断枚举边直到找到s-t的路径,判断从s可以到t可以用并查集来判断 #include<stdlib.h>//枚举最大的一条边肯定 ...
- C#--Task知识点
5天玩转C#并行和多线程编程 TASK使用总结 Task是什么,字面意思是任务 表示一个异步操作.它是异步操作的首选方式.Task是FRAMEWORK4中的新特性,封装了以前的Thread,并管理Th ...
- [bzoj1180][CROATIAN2009]OTOCI_LCT
OTOCI bzoj-1180 CROATIAN-2009 题目大意:给你n个离散的点,m个操作.支持:两点加边(保证还是森林),修改单点权值,询问两点是否联通,查询联通两点之间路径权值. 注释:$1 ...
- n!最末尾非0数
最小周期串:如果s是ss的周期串,那么ss就可以表示成几个周期的s,如果s是ss的最小周期串,那么s就是ss的周期串中最小的一个.例,ZgxZgxZgxZgx的最小周期串是Zgx.{很好理解} 给你一 ...