Struts2中关于值栈和OGNL表达式的理解
2017-03-23 13:41
363 查看
一.关于一些OGNL表达式
1. s:property:
值栈中的属性值:对于对象栈,打印值栈中对应的属性值
对于Map栈,打印request,session,application的某个属性值或某个请求参数的值
params里的第一个属性值
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
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 } 打印出排版后的时间.
二.关于获取值栈和把对象压入值栈
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对象压入到栈顶
相关文章推荐
- 关于Struts2中的值栈与OGNL表达式
- Struts2关于Action的系统训练8关于OGNL表达式的理解
- 深入理解Struts2中的OGNL表达式
- Struts2学习记录-Value Stack(值栈)和OGNL表达式
- struts2(四) ognl表达式、值栈、actionContext之间的关系
- struts2_ognl表达式与值栈
- struts2的整体回顾(ACTION、拦截器、值栈、OGNL表达式、ModelDriven方案等)
- 7、struts2 案例( 模型驱动、 防止表单重复提交--拦截器 、数据回显 、值栈 、 OGNL表达式综合运用)
- Struts2之 OGNL表达式和值栈
- Struts2学习总结(3)--值栈,Ognl表达式,Struts标签库,国际化,数据校验,拦截器
- Struts2的Ognl表达式的理解与使用
- 关于在struts2中用ognl表达式截取时间长度
- Struts2学习——(六)值栈与OGNL表达式[结合struts标签]
- Struts2之OGNL表达式与值栈对象及常用标签的使用
- 关于Struts2中的ValueStack,ActionContext,OgnlContext的理解之一:OGNL
- struts2的整体回顾(ACTION、拦截器、值栈、OGNL表达式、ModelDriven方案等)
- struts2的总体回想(ACTION、拦截器、值栈、OGNL表达式、ModelDriven方案等)
- 关于struts2的值栈以及OGNL
- struts2_Action、拦截器、值栈、OGNL表达式、ModelDriven实现方案
- S7.2_Struts2_OGNL OGNL表达式的投影和选择技术范例,OGNL表达式#和$符号的使用范例,以及值栈