一.OGNL常用符号(接上一篇文章):
1.#号
1) 作用于struts2的域对象,而不是普通域对象
2)作用于JavaBean对象
3)作用于普通字符串,如果value只是一个字符串的话,不是JavaBean对象,可以加#,也可以不加.
4) ?#,表示所有记录
^#,表示第一条记录
$#,表示最后一条记录
{?#条件}[n],表示第n+1条记录,
例如:
取出第N个记录,N为索引号
实例:ognl_3.jsp
Insert title here
userList = new ArrayList();
userList.add(new User(1, "张三", 20));
userList.add(new User(2, "李四", 25));
userList.add(new User(3, "amos", 30));
userList.add(new User(4, "hi_amos", 28));
pageContext.setAttribute("userList", userList);%>
查询大于等于25岁的所有用户,?#
编号 | 姓名 | 年龄 |
查询大于等于25岁的第一个用户,^#
编号 | 姓名 | 年龄 |
查询大于等于25岁的最后一个用户,$#
编号 | 姓名 | 年龄 |
查询大于等于25岁的最后一个用户,{?#}[索引值]
编号 | 姓名 | 年龄 |
View Code
效果如下图所示:
5)可以构造Map集合
实例:ognl_4.jsp
Insert title here
:
效果如下图所示:
2.%号
用法一:引用变量
用法二:引用常量
实例:ognl_5.jsp
Insert title here
现代:
现代2:
效果如下图所示:
3.$号
用法一:
>>读取xml文件中配置的变量
用法二:
>>读取Action类中的实例变量,底层执行getXxxx()方法
二.OGNL常用标签
1.property标签,用于输出指定值:
* default:可选属性, 如果需要输出的属性值为null,则显示该属性指定的值
* escape:可选属性,指定是否格式化HTML代码。
* value: 可选属性,指定需要输出的属性值,如果没有指定该属性,则默认输
出ValueStack栈顶的值。
例子 :
:输出栈顶的值
输出: username=username_valueStack, msgxx=msg_valueStack
输出:
hr的使用
注:escape=“false”时,hr作为html标签使用
实例:s_property.jsp
Insert title here
request.setAttribute("msg", "超链接");%>
效果如下图所示:
2. set标签
set标签用于将某个值放入指定范围。
var:变量的名字,name,id和var表达的含义是一样的,name,id被var替代
scope:指定变量被放置的范围,该属性可以接受application、session、request、 page。如果没有设置该属性,则默认放置在action中,即值栈。
value:赋给变量的值.如果没有设置该属性,则将ValueStack栈顶的值赋给变量。
例子:
实例:
s_set.jsp
Insert title here
application、session、request、 page
效果如下图所示:
3.Iterator标签
Iterator:标签用于对集合进行迭代,这里的集合包含List、Set,Map和数组。
value:可选属性,指定被迭代的集合,如果没有设置该属性,则使用ValueStack栈顶的集合。
var: 可选属性,引用变量的名称.
status:可选属性,该属性指定迭代时的IteratorStatus实例。该实例包含如下几个方法:
int getCount(),返回当前迭代了几个元素。
int getIndex(),返回当前迭代元素的索引。
boolean isEven(),返回当前被迭代元素的索引是否是偶数
boolean isOdd(),返回当前被迭代元素的索引是否是奇数
boolean isFirst(),返回当前被迭代元素是否是第一个元素。
boolean isLast(),返回当前被迭代元素是否是最后一个元素。
实例:
s_iterator.jsp
标签学习
usersList = new ArrayList();
usersList.add("张一");
usersList.add("张二");
usersList.add("张三");
usersList.add("张四");
pageContext.setAttribute("usersList", usersList);%>
索引号 | 编号 | 姓名 | 是否奇数行 | 是否偶数行 | 是否第一行 | 是否最后一行 | 状态 |
'> --%>
style='background-color:'>
A
test="#userstatus.count==2">B
test="#userstatus.count==3">C
test="#userstatus.count==4">D
效果如下图所示:
4.ognl操作集合
1)使用ognl操作list和数组.
Action中:
private List allList=new ArrayList();
Jsp:
集合的长度:
ognl也可直接创建集合对象. 利用下拉列表框:
Jsp:
实例:ognl_6.jsp
对于集合的操作,判断是否非空,长度等
userList = new ArrayList();
userList.add("hi");
userList.add("amos");
userList.add("li");
application.setAttribute("userList",userList);%>集合长度:
是否为空:
效果如下图所示:
2)使用ognl操作map
ognl用多种方式使用#号,每种是不同的.动态map对于动态单选按扭组很有用.
创建map与创建list语法很相似,不同的是map前需要加"#"号.
5.标签防止重复提交
标签防止重复提交,用法如下:
第一步:在表单中加入,第二步,使用token栏截器
例子可以参见上篇文章.
6.使用 native2ascii 程序转换字符编码
JDK 中提供了一个 native2ascii 工具程序,它可以将某种本地字符集编码的字符转换成 Unicode 转义序列的形式
DOS 下进入 test_cn_backup.properties文件所在目录,运行下面的命令后将在当前目录下生成一个名为 test_zh_CN.properites 文件:
native2ascii -encoding gb2312 源文件 目标文件.properites
native2ascii -encoding gbk a.txt b.properites
效果如下图所示:
7.本文源码