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>

 

 

posted @ 2013-05-22 18:03  hacket520  阅读(267)  评论(0编辑  收藏  举报