Java乔晓松-Struts2标签和OGNL表达式

 

采用OGNL表达式创建List/Map集合对象

如果需要一个集合元素的时候(例如List对象或者Map对象),可以使用OGNL中同集合相关的表达式。

使用如下代码直接生成一个List对象:

 <s:setname="list" value="{'zhangming','xiaoi','liming'}" />

<s:iterator value="#list"id="n">

       <s:propertyvalue="n"/><br>

</s:iterator>

 

生成一个Map对象:

<s:set name="foobar"value="#{'foo1':'bar1', 'foo2':'bar2'}" />

<s:iterator value="#foobar" >

       <s:propertyvalue="key"/>=<s:propertyvalue="value"/><br>

</s:iterator>

 

Set标签用于将某个值放入指定范围。

scope:指定变量被放置的范围,该属性可以接受application、session、request、 page或action。如果没有设置该属性,则默认放置在OGNL Context中。

value:赋给变量的值.如果没有设置该属性,则将ValueStack栈顶的值赋给变量。

采用OGNL表达式判断对象是否存在于集合中

对于集合类型,OGNL表达式可以使用in和not in两个元素符号。其中,in表达式用来判断某个元素是否在指定的集合对象中;not in判断某个元素是否不在指定的集合对象中,如下所示。

in表达式:

<s:if test="'foo' in{'foo','bar'}">

   在

</s:if>

<s:else>

   不在

</s:else>

 

not in表达式:

<s:if test="'foo' not in{'foo','bar'}">

   不在

</s:if>

<s:else>

   在

</s:else>

OGNL表达式的投影功能

除了in和not in之外,OGNL还允许使用某个规则获得集合对象的子集,常用的有以下3个相关操作符。

?:获得所有符合逻辑的元素。

^:获得符合逻辑的第一个元素。

$:获得符合逻辑的最后一个元素。

例如代码:

<s:iterator value="books.{?#this.price >35}">

     <s:property value="title" /> - $<s:propertyvalue="price" /><br>

</s:iterator>

在上面代码中,直接在集合后紧跟.{}运算符表明用于取出该集合的子集,{}内的表达式用于获取符合条件的元素,this指的是为了从大集合books筛选数据到小集合,需要对大集合books进行迭代,this代表当前迭代的元素。本例的表达式用于获取集合中价格大于35的书集合。

public class BookAction extends ActionSupport {

       privateList<Book> books;

       ....

       @Override

           public String execute() {

                      books = newLinkedList<Book>();

                      books.add(newBook("A735619678", "spring", 67));

              books.add(newBook("B435555322", "ejb3.0",15));

       }

}

property标签

property标签用于输出指定值:

<s:set name="name"value="'kk'" />

<s:property value="#name"/>

default:可选属性,如果需要输出的属性值为null,则显示该属性指定的值

escape:可选属性,指定是否格式化HTML代码。

value:可选属性,指定需要输出的属性值,如果没有指定该属性,则默认输出ValueStack栈顶的值。

id:可选属性,指定该元素的标识

 

iterator标签

iterator标签用于对集合进行迭代,这里的集合包含List、Set和数组。

<s:set name="list"value="{'zhangming','xiaoi','liming'}" />

<s:iterator value="#list"status="st">

       <fontcolor=<s:iftest="#st.odd">red</s:if><s:else>blue</s:else>>

       <s:property/></font><br>

</s:iterator>

value:可选属性,指定被迭代的集合,如果没有设置该属性,则使用ValueStack栈顶的集合。

id:可选属性,指定集合里元素的id。

status:可选属性,该属性指定迭代时的IteratorStatus实例。该实例包含如下几个方法:

       intgetCount(),返回当前迭代了几个元素。

       intgetIndex(),返回当前迭代元素的索引。

       booleanisEven(),返回当前被迭代元素的索引是否是偶数

       booleanisOdd(),返回当前被迭代元素的索引是否是奇数

       booleanisFirst(),返回当前被迭代元素是否是第一个元素。

       booleanisLast(),返回当前被迭代元素是否是最后一个元素。

if/elseif/else标签

<s:set name="age" value="21"/>

<s:if test="#age==23">

       23

</s:if>

<s:elseif test="#age==21">

       21

</s:elseif>

<s:else>

       都不等

</s:else>

url标签

<s:url action="helloworld_add"namespace="/test"><s:param name="personid"value="23"/></s:url>

生成类似如下路径:

/struts/test/helloworld_add.action?personid=23

红色部分为内容路径。

 

当标签的属性值作为字符串类型处理时, “%”符号的用途是计算OGNL表达式的值。

  <s:setname="myurl" value="'http://www.foshanshop.net'"/>

   <s:urlvalue="#myurl" /><br>

   <s:urlvalue="%{#myurl}" />

输出结果:

#myurl

http://www.foshanshop.net

表单标签_checkboxlist复选框

如果集合为list

<s:checkboxlist name="list"list="{'Java','.Net','RoR','PHP'}"value="{'Java','.Net'}"/>

生成如下html代码:

<input type="checkbox"name="list" value="Java"checked="checked"/><label>Java</label>

<input type="checkbox"name="list" value=".Net"checked="checked"/><label>.Net</label>

<input type="checkbox"name="list" value="RoR"/><label>RoR</label>

<input type="checkbox"name="list" value="PHP"/><label>PHP</label>

 

如果集合为MAP

<s:checkboxlist name="map"list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}" listKey="key" listValue="value"value="{1,2,3}"/>

生成如下html代码:

<input type="checkbox"name="map" value="1"checked="checked"/><label>瑜珈用品</label>

<input type="checkbox"name="map" value="2" checked="checked"/><label>户外用品</label>

<input type="checkbox"name="map" value="3"checked="checked"/><label>球类</label>

<input type="checkbox"name="map" value="4"/><label>自行车</label>

 

表单标签_checkboxlist复选框

如果集合里存放的是javabean

 <%

  Personperson1 = new Person(1,"第一个");

  Personperson2 = new Person(2,"第二个");

 List<Person> list = new ArrayList<Person>();

 list.add(person1);

 list.add(person2);

 request.setAttribute("persons",list);

  %>

<s:checkboxlist name="beans"list="#request.persons" listKey="personid" listValue="name"/>

Personid和name为Person的属性

 

生成如下html代码:

<input type="checkbox" name=“beans"value="1"/><label>第一个</label>

<input type="checkbox" name=“beans"value="2"/><label>第二个</label>

 

表单标签_radio单选框

该标签的使用和checkboxlist复选框相同。

如果集合里存放的是javabean(personid和name为Person的属性)

< s:radio name="beans"list="#request.persons" listKey="personid"listValue="name"/>

生成如下html代码:

<input type="radio"name="beans" id="beans1"value="1"/><label>第一个</label>

<input type="radio"name="beans" id="beans2"value="2"/><label>第二个</label>

如果集合为MAP

<s:radio name="map" list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}" listKey="key"listValue="value“ value="1"/>

生成如下html代码:

<input type="radio"name="map" id="map1" value="1"/><labelfor="map1">瑜珈用品</label>

<input type="radio"name="map" id="map2" value="2"/><labelfor="map2">户外用品</label>

<input type="radio"name="map" id="map3" value="3"/><labelfor="map3">球类</label>

<input type="radio"name="map" id="map4" value="4"/><labelfor="map4">自行车</label>

如果集合为list

<s:radio name="list"list="{'Java','.Net'}" value="'Java'"/>

生成如下html代码:

<input type="radio"name="list" checked="checked"value="Java"/><label>Java</label>

<input type="radio"name="list"value=".Net"/><label>.Net</label>

表单标签_select下拉选择框

<s:select name="list"list="{'Java','.Net'}" value="'Java'"/>

<select name="list"id="list">

   <option value="Java"selected="selected">Java</option>

   <option value=".Net">.Net</option>

</select>

<s:select name="beans"list="#request.persons" listKey="personid"listValue="name"/>

<select name="beans" id="beans">

   <option value="1">第一个</option>

   <option value="2">第二个</option>

</select>

<s:select name="map" list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}" listKey="key"listValue="value" value="1"/>

<select name="map"id="map">

   <option value="1" selected="selected">瑜珈用品</option>

   <option value="2">户外用品</option>

   <option value="3">球类</option>

   <option value="4">自行车</option>

</select>

 

 

 

下面是对struts2的一些标签的案例:

Checkboxlist复选框

List:

<s:checkboxlist name="list"list="{'Java','.Net','RoR','PHP'}" value="{'Java','.Net'}"/>

Map:

<s:checkboxlist name="map"list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}" listKey="key" listValue="value"value="{1,2,3}"/>

JavaBean:

<s:checkboxlist name="beans"list="#request.persons" listKey="personid"listValue="name"/>

Personid和name为Person的属性

 

 

Radio单选框

JavaBean:

< s:radio name="beans"list="#request.persons" listKey="personid"listValue="name"/>

Map:

<s:radio name="map" list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}" listKey="key"listValue="value“ value="1"/>

List:

<s:radio name="list"list="{'Java','.Net'}" value="'Java'"/>

 

Select下拉列表:

              <s:selectlabel="Months" name="months" headerKey="-1"

                     headerValue="选择月份"value="selectMonths"

                     list="#{'01':'Jan','02':'Feb'}" required="false" />

              <br/>

              <s:selectlabel="Monthss" name="monthss"

                     list="#{'01':'Jan','02':'Feb'}" required="false" value="'02'" />

              <br/>

              <s:selectlist="{'Java专业','3G专业','php专业','net专业'}" name="edulist"

                     label="选择专业list" value="'3G专业'" />

              <br/>

              <s:selectlist="#{1:'Java专业',2:'3G专业',3:'php专业',4:'net专业'}"

                     name="edumap"label="选择专业Map" value="4" />

 

<div align="center">

              Map案例:<br /> value:

              <s:iteratorvalue="#{1:'Java',2:'3G',3:'php',4:'net'}">

                     <s:propertyvalue="key" />

                     <s:propertyvalue="value" />

              </s:iterator>

              <br/> value+var:

              <s:iteratorvar="entity" value="#{1:'Java',2:'3G',3:'php',4:'net'}">

                     <s:propertyvalue="#entity.key" />

                     <s:propertyvalue="#entity.value" />

              </s:iterator>

              <br/> <br /> <br /> List案例:<br /> value:

              <s:iteratorvalue="{'Java','php','3G','net'}">

                     <s:property/>

              </s:iterator>

              <br/> value+var:

              <s:iteratorvar="var" value="{'Java','php','3G','net'}">

                     <s:propertyvalue="var" />

              </s:iterator>

       </div>

       <divalign="left">

              in,notin的用法:<br /> in:

              <s:iftest="'Java' in {'Java','php','3G','net'}">

                     Java在集合中

              </s:if>

              <s:else>

                     Java不在集合中

              </s:else>

              <br/> not in:

              <s:iftest="'net' not in {'Java','php','3G'}">

                     net不在集合中

              </s:if>

              <s:else>

                     net在集合中

              </s:else>

       </div>

       <divalign="right">

              set标签:<br />

              <s:setvar="msg" value="'aaa<br/>aaa'"></s:set>

              <s:propertyvalue="msg" escape="true" />

       </div>

       <divalign="center">

              Push标签:<br />

              <s:pushvalue="'pushvalue'">

                     <s:property/>

              </s:push>

       </div>

       <divalign="left">

              Bean标签:<br />

              <s:beanname="www.csdn.struts_tag.domain.Users" var="myUsers">

                     <s:paramname="id" value="'1'" />

                     <s:paramname="name" value="'乔晓松'" />

                     <s:paramname="pass" value="'song'" />

                     标签内部:

                     <s:propertyvalue="name" />

              </s:bean>

              <br/> 标签外1:

              <s:propertyvalue="#myUsers.name" />

              <br/> 标签外2:

              <s:setvar="user" value="#myUsers" />

              <s:propertyvalue="#user.name" />

              <br/>

              <s:property/>

       </div>

       <divalign="right">

       iterator标签:<br/>

              <tableborder="1px">

                     <s:iteratorvar="name" value="{'Java','3G','php','net'}"status="st">

                            <trclass='<s:propertyvalue='#st.even?"even":"odd"'/>'>

                                   <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<s:property value="name" />

                                   </td>

                            </tr>

 

                     </s:iterator>

              </table>

       </div>

你可能感兴趣的:(struts2,ongl)