您的位置:首页 > 编程语言 > Java开发

Struts2中关于值栈和OGNL表达式的理解

2017-03-23 13:41 363 查看
一.关于一些OGNL表达式

1.  s:property: 

 值栈中的属性值:对于对象栈,打印值栈中对应的属性值    

<s:property value="[0].productName"/>


 对于Map栈,打印request,session,application的某个属性值或某个请求参数的值

<s:property value="#session.date"/>


 params里的第一个属性值
<s:property value="#parameters.name[0]"/>


2. s:url: 创建一个URL字符串

   <s:url value="/testUrl" var="url">
<!-- 指定url包含的请求参数,2001不可能是一个属性名,struts2把2001直接作为属性值 -->
<s:param name="productId" value="2001"></s:param>
</s:url>
${url } : /struts2-4/testUrl?productId=2001
        <s:url value="/getProduct" var="url2">
<!-- 对于value值会自动的进行OGNL解析 -->
<s:param name="productId" value="productId"></s:param>
</s:url>
${url2 }:/struts2-4/getProduct?productId=1001 . 因为productId在其他地方已经赋过值,在这里直接进行解析.
      <s:url value="/getProduct" var="url3">
<!-- 对于value值会自动的进行OGNL解析,若不希望进行OGNL解析,则使用单引号引起来 -->
<s:param name="productId" value="'abcdefg'"></s:param>
</s:url>
${url3 }:/struts2-4/getProduct?productId=abcdefg

       
<!-- 构建一个请求action的地址 -->
<s:url action="testAction" namespace="/helloWorld" method="save"var="url4"></s:url>
${url4 }:/struts2-4/helloWorld/testAction!save.action

3.   s:set: 向page,request,session,application域对象中加入一个属性值

         <!-- 对value属性值自动的进行OGNL解析 -->
<s:set name="productName" value="productName" scope="request"></s:set>
${requestScope.productName } : name
4.  s:push : 把一个对象在标签开始后压入到值栈中,标签结束时,弹出值栈

  <%
Person person = new Person();
person.setName("anjiawei");
person.setAge("10");
request.setAttribute("person", person);
%>
<s:push value="#request.person">
${name }
</s:push> 会把name值打印出来
5. s:if s:else s:elseif

 <!-- 可以直接使用值栈中的属性, --> 对productPrice直接进行解析
<s:if test="productPrice >1000">
I7处理器
</s:if>

<s:elseif test="productPrice>800">
I5处理器
</s:elseif>

<s:else>
I3处理器
</s:else>
6.  s:iterator: 遍历集合的,把这个可遍历对象里的每一个元素一次压入和弹出

 <%
List<Person> persons = new ArrayList<Person>();
persons.add(new Person("AA", "10"));
persons.add(new Person("BB", "20"));
persons.add(new Person("CC", "30"));
persons.add(new Person("DD", "40"));
persons.add(new Person("EE", "50"));
request.setAttribute("persons", persons);
%>
<s:iterator value="#request.persons">
${name } -- ${age }<br>
</s:iterator>
把集合中的元素依次遍历出来
7.  s:date 可以对Date对象进行排版

<%
Date date = new Date();
session.setAttribute("date", date);
%>
<s:date name="#session.date" format="yyyy-MM-dd hh:mm:ss" var="date2"/>
date:${date2 } 打印出排版后的时间.


二.关于获取值栈和把对象压入值栈

ValueStack valueStack = ActionContext.getContext().getValueStack();//获取值栈
Test test = new Test();
test.setProductDesc("AAAA");
test.setProductName("BBB");
valueStack.push(test);//将Test对象压入到栈顶
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: