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

来源:互联网 发布:只有我知手机在线 编辑:程序博客网 时间:2024/05/29 18:04

 

采用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>

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小宝宝被蚊虫咬了怎么办 小宝宝被蚊子咬了怎么办 衣架打小孩淤青怎么办 1岁宝宝有痰咳嗽怎么办 1岁宝宝咳嗽有痰怎么办 孩子爱动手打家长怎么办 不小心有了孩子该怎么办 2岁多宝宝干咳怎么办 2岁宝宝咳嗽无痰怎么办 打了孩子后悔了怎么办 12小孩脾气很犟怎么办 被学生气着了怎么办 1岁宝宝轻微咳嗽怎么办 4岁宝宝突然呕吐怎么办 4岁儿童突然呕吐怎么办 四岁儿童90身高怎么办 24个月宝宝缺钙怎么办 狗狗总是要人陪着玩怎么办 成年了还是很皮怎么办 三岁儿子太调皮怎么办 10个月宝宝粘人怎么办 6个月宝宝粘人怎么办 9个月宝宝偏矮怎么办 1岁宝宝粘人爱哭怎么办 宝宝2岁半胆小怎么办 5岁宝宝超级粘人怎么办 狗狗吃饭要人喂怎么办 十个月宝宝认人怎么办 一岁宝宝粘人怎么办 9个月宝宝粘妈妈怎么办 一岁的宝宝呕吐怎么办 宝宝一岁八个月太粘人了怎么办 六个月的宝宝好粘人怎么办 两岁半宝宝说话突然结巴了怎么办 1岁宝宝突然呕吐怎么办 宝宝吃坏了呕吐怎么办 1岁宝宝吃饭爱玩怎么办 7岁儿童半夜呕吐怎么办 一个月宝宝粘人怎么办 2岁宝宝太粘人了怎么办 8个月宝宝很粘人怎么办