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标签)