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

一.关于一些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对象压入到栈顶


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值