如果需要一个集合元素的时候(例如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>
除了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标签用于输出指定值:
<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(),返回当前被迭代元素是否是最后一个元素。
<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>
<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
如果集合为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>
如果集合里存放的是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>
该标签的使用和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>
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> <s:property value="name" />
</td>
</tr>
</s:iterator>
</table>
</div>