OGNL表达式语句:
- OGNL(Object DGraph Navigation Language):是一种强大的表达式语言,能够自动导航对象的结构并访问和设置对象数据
- OGNL上下文相当于一个Map容器,在Map容器中可以保存任何类型的数据(对象、数组等)
基本格式,如:
JavaBean对象User{id:int; name:String}
访问属性的方式为:
#user.name
ONGL表达式语言的特点:
- 支持对象方法的调用
- 支持井台方法的调用
- 支持变量的赋值
- 可以操作 集合数据
Struts2中的OGNL:
- 在Struts2中,OGNL上下文作用于Struts2中的ActionContext对象
ActionContext中的对象:
- 值栈(根)、application、session、request、parameters、attr
获取application中的对象:
#application.name或#application.['name']
获取request中的对象:
#request.name或#request.['name']
获取session中的对象:
#session.name或#session.['name']
获取parameters中的对象:
#parameters.name或#parameters.['name']
获取attr中的对象:
#attr.name或#attr.['name']
在JSP页面中获取对象的属性:
<s:property value="user.id" /> 或 <s:property value="user[id]" />
注意:Struts2的JSP页面需要导入标签库:
<%@taglib prefix="s" uri="/struts-tags"%>
静态属性的调用方法如下:
//通过@符号来标注 @com.michale.djh.Bean@NAME
注意:默认情况下,struts2不允许调用静态方法,需要在struts.xml文件中手动开启
<constant name="struts.ognl.allowStaticMethodAccess" value="true" />
访问集合:
- List集合:(有序集合),可以使用下标的方式访问,如:list[0]
- Set集合:(无序集合),不能通过下标的形式访问
Map集合:键值对形式,通过key访问value:
map.key 或 map.['key']
获取所有的Key和value:
map.keys //获取所有的Key map.values //获取所有的value
集合的操作:
collection.isEmpty//判断集合元素是否为空 colloection.size()//获取集合的长度
投影与选择:
投影:对集合中列的操作,指将集合中的某一列数据都抽取出来形成一个集合,如:
#list.{name} //获取一个包含多个学生对象集合的所有学生姓名
选择:对集合中行的操作,指通过一定的条件获取集合中满足这一条件的的数据,所获取的行就是对集合中数据的选择操作,如:
#list.{?#this.age>10}//获取所有年龄大于10的所有学生,"?"表示满足这一条件的所有对象
- OGNL表达式中的操作符:
- ?:获取满足指定条件的所有元素
- ^:获取满足指定条件的所有元素中的第一个元素
- $:获取满足指定条件的所有元素中的最后一个元素
Struts2的标签库
数据标签:
- property:用于获取数据值,并将数据值直接输出到页面中,其属性如下:
- default:可选
- escape:可选
- escapeJavaScript:可选
- value:可选
set:用于定义一个变量,可以为所定义的变量赋值及设置变量的作用域(application、request、session),set标签属性:
- scope(String):可选,设置变量的作用域,其默认值是action
- value(String):可选,设置变量的值
- var(String):可选,定义变量的名称
set标签用法:
<s:set var="username" value="test set tag" scope="request"></s:set> <s:set default="no data!" value="#request.username"/>
- a:用于构建超链接,常用属性:
- action(String):将超链接的地址指向action
- href(String):超链接地址
- id(String):设置HTML中的属性名称
- method(String):如果超链接的地址指向action,method同时可以为action声明所调用的方法
- namespace(String):可以为action声明命名空间
- param:用于对参数赋值,属性如下:
- name(String):设置参数名称
- value(Object):设置参数值
- action:用于执行 一个Action请求,可以将Action的返回结果输出到当前页面中,也可以不输出,其属性如下:
- executeResult(String):是否使Action返回到执行结果,默认值为false
- flush(Boolean):输出结果是否刷新,默认值为true
- ignoreContextParams(Boolean):是否将页面请求参数传入被调用的Action,默认值为false
- name(String):Action对象所映射的名称,也即是struts.xml中配置的名称
- namespace(String):指定名称空间的名称
- var(String):引用此action的名称
push:用于将对象或值压入到值栈中并放置到顶部,简化操作,用法如下:
<s:push value="#request.student"></s:push>
- date:用于格式化日期时间,可以对日期时间值进行指定的格式化样式格式化,包含的属性如下:
- format(String):设置格式化日期的样式
- name(String):日期值
- var(String):格式化时间的名称变量,通过该变量可以对其进行引用
include:类似于JSP的include标签,添加了可以在目标页面中通过param标签传递请求参数的功能,用法如下:
<%@include file="/pages/common/admin.jsp"%>
- url
- property:用于获取数据值,并将数据值直接输出到页面中,其属性如下:
控制标签:
if:
- :可以单独使用
- :配合使用
- :配合使用
使用方式:
<s:if test="表达式(布尔值)"> //test属性用于设置标签的判断条件,其值为布尔类型的条件表达式,如: expression1 <s:if> <s:elseif test="expr(Boolean)"> expression2 </s:elseif> ... <s:else> expression3 </s:else>
- iterator:可以遍历数组和集合类中的所有或部分数据(可以指定迭代数据的起始位置、步长以及终止位置来迭代集合或数组中的部分数据),其属性如下:
- begin(Integer):指定迭代数组或集合的起始位置,默认值为0
- end(Integer):指定迭代数组或集合的结束位置,默认值为集合或数组的长度
- status(String):迭代过程中的状态
- step(Integer):迭代的步长,默认值为1
- value(String):指定迭代的集合或数组对象
- var(String):设置迭代元素的变量,若指定此属性,那么迭代的变量将压入到值栈中
数据的验证机制:
- 手动验证的实现: 在继承ActionSupport类的情况下,重写validate()方法,在该方法中进行验证
- 验证文件的命名规则: 验证文件的名称必须是以下两种:(ActionName是Action对象的名称,AliasName为Action配置中的名称,也即是struts.xml配置文件中Action元素对应name属性的名称)
- ActionName-validation.xml: 数据的验证会作用于整个Action对象中,并验证Action对象的请求业务处理方法,适用于验证处理的规则都相同的形式
- ActionName-AliasName-validation.xml: 更加灵活。
验证文件的编写风格:
字段验证器编写格式: 如:验证用户名与密码(注意xml文件需要指定编码格式),其中name为需要检验的字段
<validators> <field name="username"> <field-validator type="requiresstring"> <message>Please Input user name</message> </field-validator> </field> <field name="password"> <field-validator type="requiresstring"> <message>Please I