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