struts2-OGNL

来源:互联网 发布:画脑图的软件 编辑:程序博客网 时间:2024/05/16 06:41

OGNL(Object Graph Navigation Language)->提高数据访问功能
#bar.foo.blath-->意味着bar.getFoo().getBlath()方法的返回值,若访问的属性属于根对象,则可以直接访问该属性,如foo;否则,如:#bar.blath

--------------------------------------------------------------
访问构造方法:
  <s:property value="new bean.Student()"/>
创建对象调用属性、方法:
<s:property value="new bean.Student().firstName"/>
<s:property value="new bean.Student().getFirstName()"/>
<s:property value="new bean.Student().no"/>
<s:set name="student" value="new bean.Student()"/>
no:<s:property value="#student.no"/><br/>
直接调用value stack(值栈)中属性
<s:property value="myStudent"/>
<s:property value="myStudent.firstName"/><br/>
<s:property value="myStudent.setFirstName('仄仄仄仄仄')"/>
<s:property value="myStudent.getFirstName()"/>
<s:property value="getList()"/><br/>

学校学生的姓名:
<s:property value="mySchool.student.firstName"/>
学校学生的学号:
<s:property value="mySchool.student.getNo()"/>
学校学生成绩:
<s:property value="mySchool.student.setScoreJava(12)"/>
<s:property value="mySchool.student.getScoreJava()"/>
学校的地址:
<s:property value="mySchool.show()"/>

<br/>


访问action中静态信息(@类名@静态变量或方法)——

<s:property value="@bean.OGNLTestAction@address"/><br/>
<s:property value="@bean.OGNLTestAction@show()"/><br/>
访问JDK中静态常量PI:
<s:property value="@java.lang.Math@PI"/><br/>
访问JDK中静态方法max():
<s:property value="@java.lang.Math@max(5,6)"/><br/>
常量""与'':
<s:property value='"字符串"'/>
<s:property value="'c'"/>
<s:property value="100"/><br/>

运算符mod(取模):
 <s:property value="9%7"/><br/>

  <s:property value="myList"/><br>
  <s:iterator value="myList" status="st">
     <s:property value="#st.count"/>:
     <s:property value="no"/>,
     <s:property value="firstName"/>,
     <s:property value="scoreJava"/><br>
  </s:iterator><br>
  list:
 <s:property value="list"/><br>
 <s:iterator value="list" status="st">
     <s:property/><br>
     <s:set name="count" value="#st.count"></s:set>
 </s:iterator>
 list.count:
 <s:property value="#count"/><br/>
 size:
 <s:property value="list.size"/><br/>
 empty:
 <s:property value="list.isEmpty"/><br/>
    <s:property value="set"/><br>
    <s:property value="locale"/><br>
    <s:property value="myStudent"/><br>
   
    <s:property value="mySchool."/><br>
    <s:property value="map"/><br>
   
数组:
<s:property value="getA()"/><br/>
<s:property value="a"/><br/>

数组a.length:
<s:property value="a.length"/><br/>

属性调值与方法调值(栈stack):
<s:property value="#student.no"/>
<s:property value="#student.getNo()"/>
<s:property value="#student.setNo(123)"/>
<s:property value="#student.no"/>
<s:property value="#student.getNo()"/><br/>
属性调值与方法调值(值栈value stack):
<s:property value="myStudent.no"/>
<s:property value="myStudent.getNo()"/>
<s:property value="myStudent.setNo(123)"/>
<s:property value="myStudent.no"/>
<s:property value="myStudent.getNo()"/><br/>
student与myStudent:
<s:property value="myStudent"/><br/>
<s:property value="#student"/><br/>
<s:property value="#student"/><br/>
<s:debug/>
map:
<s:property value="map"/><br/>
<s:property value="map.keys"/><br/>
<s:property value="map.values"/><br/>
<s:property value="map[1]"/><br/>

投影某列属性:
<s:property value="myList.{firstName}"/><br/>
投影列的某个属性:
<s:property value="myList.{scoreJava}[2]"/><br/>
投影列的某个对象属性:
<s:property value="myList[2].{scoreJava}"/><br/>

筛选匹配选择逻辑的元素:
<s:property value="set.{?#this.no>1}.{firstName}"/><br/>
筛选第一个元素:
<s:property value="set.{^#this.no}"/>-
<s:property value="set.{^#this.no}.{firstName}"/><br/>
筛选最后一个元素:
<s:property value="set.{$#this.no}"/>-
<s:property value="set.{$#this.no}.{scoreJava}"/><br/>
<s:property value=""/><br/>

筛选+投影:<s:property value="set.{?#this.no>1}.{firstName}"/>

lambda表达式:
<s:property value="#f=:[#this==1?1:#this*#f(#this-1)],#f(4)"/><br/>
<s:property value="#f=:[#this==1?1:#this==2?2:#f(#this-1)+#f(#this-2)],#f(6)"/><br/>
值栈(action是value stack 的栈顶元素):
<br/>
top(输出的是action的实例):<s:property value="top"/>
<br/>
top.myList[0]:<s:property value="top.myList[0]"/>
<br/>
[0]:<s:property value="[0]"/>
<br/>
[1]:<s:property value="[1]"/>
<br/>
[2]:<s:property value="[2]"/>
<br/>
#:
<s:property value="#f"/><br/>
#动态构建map:
<s:property value="#{1:'value1',2:'value2'}"/><br/>

#set与property:
<s:set name="foobar" value="#{'key1':'value1',2:'value2'}" />
<s:property value="#foobar.keys"/>
<s:property value="#foobar.values"/><br/>
map的第一个元素:
<s:property value="#foobar['key1']"/><br/>
map迭代:
<s:iterator value="#foobar.keys" var="key" status="st">
    <s:property value="#foobar[#key]"/>
</s:iterator>
<br/>

<p>不使用%:<s:url value="#foobar['key1']" /></p>

<p>使用%:<s:url value="%{#foobar['key1']}" /></p>

0 0