struts-OGNL标签
1、property标签
<s:property value=“#name" default="a default value" />
* default:可选属性, 如果需要输出的属性值为null,则显示该属性指定的值
* escape:可选属性,指定是否格式化HTML代码。 escape=“false”时,hr作为html标签使用
* value: 可选属性,指定需要输出的属性值,如果没有指定该属性,则默认输 出ValueStack栈顶的值。
1 <s:property value="#request.username"/>:输出栈顶的值 2 输出: username=username_valueStack, msgxx=msg_valueStack 3 4 <s:property value="#request.username111" default="default value"/> 5 <s:property value="%{'<hr> hr的使用'}" escape="false" /> 6 输出:<hr> hr的使用 7 注:escape=“false”时,hr作为html标签使用
2、set标签
set标签用于将某个值放入指定范围。
var:变量的名字,name,id和var表达的含义是一样的,name,id被var替代
scope:指定变量被放置的范围,该属性可以接受application、session、request、 page或action。如果没有设置该属性,则默认放置在action中。
value:赋给变量的值.如果没有设置该属性,则将ValueStack栈顶的值赋给变量。
1 <s:set value="#request.username" var="xxx“ scope=“request” /><br> 2 <s:property value=“#request.xxx" /><br> 3 <s:set value="#request.username" var="xxx" scope="page" /><br> 4 <s:property value="#attr.xxx" /><br> 5 <s:set value="#request.username" var="xxx" /><br> 6 <s:property value="xxx" /><br>
3、push标签
push:将对象放入栈顶,不能放入其他范围,当标签结束,会从栈顶删除。
value:要push到堆栈中的值 。
1 <s:push value="#request.username"> 2 <s:property/> 3 </s:push> 4 <br> 5 测试删除: <s:property/>
4、 action标签
Action:通过指定命名空间和action名称,该标签允许在jsp页面直接调用Action-相当于直接访问
name:action名字(不包括后缀,如.action)
namespace:action所在命名空间
executeResult:Action的result是否需要被执行,默认值是false不执行
1 <package name="ognl" namespace="/ognl" extends="struts-default" > 2 <action name="ognlAction_*" class="cn.itcast.ognl.OgnlAction" method="{1}"> 3 <result name="ognl">/ognl/ongl.jsp?msg=${msgxx}</result> 4 </action> 5 </package> 6 7 <s:action name="ognlAction_test" namespace="/ognl" executeResult="true" />
5、 iterator标签
Iterator:标签用于对集合进行迭代,这里的集合包含List、Set和数组。
value: 可选属性,指定被迭代的集合,如果没有设置该属性,则使用ValueStack栈顶的集合。
var: 可选属性,引用变量的名称.
status: 可选属性,该属性指定迭代时的IteratorStatus实例。该实例包含如下几个方法:
int getCount(),返回当前迭代了几个元素。
int getIndex(),返回当前迭代元素的索引。
boolean isEven(),返回当前被迭代元素的索引是否是偶数
boolean isOdd(),返回当前被迭代元素的索引是否是奇数
boolean isFirst(),返回当前被迭代元素是否是第一个元素。
boolean isLast(),返回当前被迭代元素是否是最后一个元素。
1 <style type="text/css" 2 .odd{ 3 background-color: red; 4 .even{ 5 background-color:blue;} 6 </style> 7 8 <s:iterator value="%{#request.persons}" var="person"> 9 <s:property value="#person"/><br> 10 </s:iterator> 11 <s:iterator value="%{#request.persons}" var="person"> 12 <s:property value="#person.id"/>~<s:property value="#person.name"/>~<s:property value="#person.age"/> 13 </s:iterator> 14 <s:iterator value="%{#request.persons}" var="person" status="st"> 15 返回当前迭代了几个元素. <s:property value="#st.count"/><br> 16 返回当前迭代元素的索引.<s:property value="#st.index"/><br> 17 返回当前被迭代元素的索引是否是偶数.<s:property value="#st.even"/><br> 18 返回当前被迭代元素的索引是否是奇数.<s:property value="#st.odd"/><br> 19 返回当前被迭代元素是否是第一个元素.<s:property value="#st.first"/><br> 20 返回当前被迭代元素是否是最后一个元素.<s:property value="#st.last"/><br><br> 21 </s:iterator> 22 23 <table border="1"> 24 <s:iterator value="%{#request.persons}" var="person" status="st"> 25 <tr class="<s:property value="#st.even?'evenClass':'oddClass'"/>"> 26 <td><s:property value="#person.id"/></td> 27 <td><s:property value="#person.name"/></td> 28 <td><s:property value="#person.age"/></td> 29 </tr> 30 </s:iterator> 31 </table>
6、 if/elseif/else标签
if/elseif/else 基本的流程控制.‘If’标签可单独使用也可以和‘Else If’标签和(或)一个多个‘Else’一起使用
1 <s:if test="#age==23"> 2 23 3 </s:if> 4 <s:elseif test="#age==21"> 5 21 6 </s:elseif> 7 <s:else> 8 都不等 9 </s:else>
1 <table border="1"> 2 <s:iterator value="%{#request.persons}" var="person" status="st"> 3 <tr class="<s:property value="#st.even?'evenClass':'oddClass'"/>"> 4 <td><s:property value="#person.id"/></td> 5 <td><s:property value="#person.name"/></td> 6 <td><s:property value="#person.age"/></td> 7 <td><s:if test="#person.age<24">少年</s:if> 8 <s:elseif test="#person.age<26">中年</s:elseif> 9 <s:else>老年</s:else></td> 10 </tr> 11 </s:iterator> 12 </table>
7、url标签
url:该标签用于创建url,可以通过"param"标签提供request参数.
value:如果不提供就用当前action,使用value后缀必须加.action
action:用来生成url的action,如果没有则使用value
namespace :命名空间
var:引用变量的名称.
1 <s:url action="ognlTagAction_test" namespace="/ognl" var="myurl"> 2 <s:param name="name" value="%{'张老师'}"></s:param> 3 <s:param name="id" value="12"></s:param> 4 </s:url> 5 6 <a href='<s:property value="#myurl" />' >xxxx</a><br> 7 <a href='<s:property value="%{#myurl}" />' >xxxx</a><br> 8 9 使用value<br> 10 <s:url value="ognlTagAction_test.action" namespace="/ognl" var="myurl"> 11 <s:param name="id" value="12"></s:param> 12 <s:param name="cnname" value="%{'zhang'}"></s:param> 13 </s:url> 14 15 <a href='<s:property value="#myurl" />' >xxxx</a><br>
8、ognl操作集合
a) 使用ognl操作list和数组.
1 Action中: 2 List<Person> list = new ArrayList<Person>(); 3 for(int i=0;i<10;i++){ 4 Person p = new Person(); 5 p.setId(i); 6 p.setName("lucy"+i); 7 p.setAge(20+i); 8 list.add(p); 9 } 10 request.setAttribute("persons", list); 11 Jsp: 12 集合的长度:<s:property value="#request.persons.size"/><br>
1 Jsp: 2 <s:iterator value="{1,2,3,4}"> 3 <s:property/> <br> 4 </s:iterator> 5 6 <s:iterator value="{'s1','s2','s3','s4'}" var="s"> 7 <s:property value="#s"/> <br> 8 </s:iterator>
b) 使用ognl操作map
ognl用多种方式使用#号,每种是不同的.动态map对于动态单选按扭组很有用.
创建map与创建list语法很相似,不同的是map前需要加"#"号.
1 <s:iterator value="#{'key01':'value01','key02':'value02'}"> 2 <s:property/> <br> 3 </s:iterator> 4 5 <s:iterator value="#{'key01':'value01','key02':'value02'}"> 6 key=<s:property value="key"/> value=<s:property value="value"/> <br> 7 </s:iterator> 8 9 10 <s:iterator value="#{'key01':'value01','key02':'value02'}" var="map"> 11 key=<s:property value="#map.key"/> value=<s:property value="#map.value"/> <br> 12 </s:iterator>
样例代码:
1 <%@ page language="java" pageEncoding="utf-8"%> 2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 3 <%@ taglib uri="/struts-tags" prefix="s"%> 4 <html> 5 <head> 6 <title>My JSP 'index.jsp' starting page</title> 7 <meta http-equiv="description" content="This is my page"> 8 </head> 9 <style type="text/css"> 10 .oddClass{ 11 background-color: red;} 12 .evenClass{ 13 background-color:blue;} 14 </style> 15 <body> 16 ognlTag.jsp<br> 17 -------------------------------------------------------------------------------------------------------<br> 18 property标签用于输出指定值:<br> 19 <s:property value="#request.username"/><br> 20 <s:property value="#request.username11" default="xxxxx"/><br> 21 <s:property value="%{'<hr>hr的使用'}" escape="false"/><br> 22 -------------------------------------------------------------------------------------------------------<br> 23 set标签用于将某个值放入指定范围:<br> 24 <s:set value="#request.username" var="xxx"/> 25 <s:property value="#xxx"/><br> 26 <s:set value="#session.username" var="xxx" scope="request"/> 27 <s:property value="#request.xxx"/><br> 28 <s:set value="#application.username" var="xxx" scope="page"/> 29 <s:property value="#attr.xxx"/><br> 30 -------------------------------------------------------------------------------------------------------<br> 31 push:将对象放入栈顶,不能放入其他范围,当标签结束,会从栈顶删除。<br> 32 <s:push value="#request.username"> 33 <s:property/><br><s:debug></s:debug> 34 </s:push> 35 36 -------------------------------------------------------------------------------------------------------<br> 37 Action:通过指定命名空间和action名称,该标签允许在jsp页面直接调用Action <br> 38 <s:action name="OgnlAction_test" namespace="/ognl" executeResult="fasle" /> 39 -------------------------------------------------------------------------------------------------------<br> 40 Iterator:标签用于对集合进行迭代,这里的集合包含List、Set和数组。<br> 41 <s:iterator value="#request.persons" var="person"> 42 <s:property value="#person"/><br> 43 </s:iterator> 44 <br><br> 45 <s:iterator value="#request.persons" var="person"> 46 <s:property value="#person.id"/>~~<s:property value="#person.name" />~~<s:property value="#person.age" /><br> 47 </s:iterator> 48 <br><br> 49 <s:iterator value="#request.persons" var="person" status="st"> 50 返回当前迭代了几个元素:<s:property value="#st.count"/><br> 51 返回当前迭代元素的索引:<s:property value="#st.index"/><br> 52 返回当前被迭代元素的索引是否是偶数:<s:property value="#st.even"/><br> 53 返回当前被迭代元素的索引是否是奇数:<s:property value="#st.odd"/><br> 54 返回当前被迭代元素是否是第一个元素:<s:property value="#st.first"/><br> 55 返回当前被迭代元素是否是最后一个元素:<s:property value="#st.last"/><br> 56 </s:iterator> 57 <br><br> 58 <table border="1"> 59 <s:iterator value="#request.persons" var="person" status="st"> 60 <tr class="<s:property value="#st.even?'evenClass':'oddClass'" />"> 61 <td><s:property value="#person.id" /></td> 62 <td><s:property value="#person.name" /></td> 63 <td><s:property value="#person.age" /></td> 64 </tr><br> 65 </s:iterator> 66 </table><br><br> 67 -------------------------------------------------------------------------------------------------------<br> 68 if/elseif/else 基本的流程控制.‘If’标签可单独使用也可以和‘Else If’标签和(或)一个多个‘Else’一起使用 <br> 69 <table border="1"> 70 <s:iterator value="#request.persons" var="person" status="st"> 71 <tr class="<s:property value="#st.even?'evenClass':'oddClass'" />"> 72 <td><s:property value="#person.id" /></td> 73 <td><s:property value="#person.name" /></td> 74 <td><s:property value="#person.age" /></td> 75 <td><s:if test="#person.age<24">少年</s:if> 76 <s:elseif test="#person.age<26">中年</s:elseif> 77 <s:else>老年</s:else></td> 78 </tr><br> 79 </s:iterator> 80 </table> 81 -------------------------------------------------------------------------------------------------------<br> 82 url:该标签用于创建url,可以通过"param"标签提供request参数. <br> 83 <s:url action="OgnlAction_test" namespace="/ognl" var="myurl"></s:url> 84 <a href="<s:property value='#myurl'/>">测试test</a><br> 85 -------------------------------------------------------------------------------------------------------<br> 86 使用ognl操作list和数组. <br> 87 <s:iterator value="{1,2,3,4}" var="list"> 88 <s:property value="#list"/><br> 89 </s:iterator> 90 <br><br> 91 <s:iterator value="{'s1','s2','s3','s4'}" var="list"> 92 <s:property value="#list"/><br> 93 </s:iterator> 94 ognl也可直接创建集合对象. <br> 95 <s:iterator value="#request.persons" var="person"> 96 <s:property value="#person.name"/><br> 97 </s:iterator> 98 使用ognl操作map <br> 99 <s:iterator value="#{'01':'java','02':'php','03':'.net','04':'c++'}" var="abcd"> 100 <s:property value="#abcd.key"/>~~<s:property value="#abcd.value"/><br> 101 </s:iterator> 102 -------------------------------------------------------------------------------------------------------<br> 103 集合的投影(只输出部分属性) <br> 104 <s:iterator value="#request.persons.{name}" var="person"> 105 <s:property value="#person"/><br> 106 </s:iterator> 107 集合的过滤<br> 108 <s:iterator value="#request.persons.{?#this.age>24}" var="person"> 109 <s:property value="#person.age"/><br> 110 </s:iterator> 111 集合的投影和过滤<br> 112 <s:iterator value="#request.persons.{?#this.age>24}.{name}" var="person"> 113 <s:property value="#person"/><br> 114 </s:iterator> 115 </body> 116 </html>