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>