1.什么是OGNL?
ObjectGraphNavigationLanguage 和EL同为表达式语言,但功能更为强大
2.OGNL在Struts2中做两件事
- 表达式语言
- 将表单或Struts2标签与特定的java数据绑定起来,用来将数据移入,移出框架
- 类型转换
- 数据进入和流出框架,在页面数据的字符串类型和java数据类型进行转换
3.值栈(valueStack)
- 由Struts2框架创建的存储区域,具有栈的特点 Action的实例会被存放到值栈中
- OGNL访问值栈重上到下的顺序 ,靠近栈顶的同名属性会被读取
4.类型转换
- 日期转换
- 局部:ArrayDataTransferAction-conversion.properties timeDate=cn.converter.DateConverter
- 全局:xwork-conversion.propertiesjava.util.Date=cn.converter.DateConverter
5.修改所有的错误信息
<constantname="struts.custom.i18n.resources"value="message"/>
6.配置message.properties
xwork.error.action.execution=ErrorduringActioninvocation
xwork.exception.missing-action=ThereisnoActionmappedforactionname{0}.
xwork.exception.missing-package-action=ThereisnoActionmappedfornamespace{0}andactionname{1}.
xwork.default.invalid.fieldvalue=\u5B57\u6BB5"{0}"\u65E0\u6548.
7.配置struts.xml
8.OGNL表达式
- 注意事项
- 访问Bean的属性
- 必须具有无参构造
- Set/get方法符合javaBean规范
实例
创建集合对象:
<s:setname="userList"value="{'Jason','Tom','Marry'}"/>
<s:propertyvalue="#userList[1]"/>
<s:propertyvalue="#userList.size"/>
<hr>
创建Map
<s:setname="map"value="#{'cn':'China','us':'the United States'}"/>
<s:propertyvalue="#map.cn"/>
<s:propertyvalue="#map['cn']"/>
<hr>访问非值栈对象加#
<s:setname="age"value="20"scope="request"></s:set>
<s:setname="username"value="'Jason'"scope="session"></s:set>
<s:setname="count"value="5"scope="application"></s:set>
#request.age:<s:propertyvalue="#request.age"/><br>
#session.username:<s:propertyvalue="#session.username"/><br>
#application.count:<s:propertyvalue="#application.count"/><br>
#attr.count:<s:propertyvalue="#attr.count"/><br>
<hr>演示字符串常量
<s:setname="country1"value="China"></s:set>
<s:setname="country2"value="'China'"></s:set>
常量使用单引号
#country1:<s:propertyvalue="#country1"/><br>
#country2:<s:propertyvalue="#country2"/><br>
没指定访问类型只有request可以
#request.country2:<s:propertyvalue="#request.country2"/><br>