`
qxs965266509
  • 浏览: 3868 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

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>

分享到:
评论

相关推荐

    光伏短期功率预测-靳晓松-201810211

    靳晓松在2018年的分享中,提到了几种影响实发功率预测的因素以及相应的处理方法。 首先,实发辐照度的准确性对预测至关重要。系统性的采集设备异常可能导致实发辐照度表现为恒定或异常值,这些数据通常需要被直接...

    光伏短期功率预测-靳晓松-201810201

    光伏短期功率预测是太阳能发电系统运营中的关键环节,它涉及...通过深入理解光照与功率输出的关系,并精确识别和处理异常数据,可以提升预测的准确性,这对于实现太阳能资源的最大化利用和电力系统的稳定运行至关重要。

    Windows内核实现的34个关键问题

    资源名称:Windows内核实现的34个关键问题资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    课程设计课程设计课程设计课程设计

    【标签】: "课程设计课程设计课程设计课程设计" - 这些标签强调了课程设计的核心内容,涵盖从项目构思到实施的全过程,涉及到编程语言、算法设计、数据结构、软件工程等多个方面。 【压缩包子文件的文件名称列表】:...

    多媒体技术教程 胡晓松等

    为了跟上技术的发展步伐,胡晓松等编著的《多媒体技术教程》应运而生,它不仅为初学者提供了一个全面了解和学习多媒体技术的平台,也为企业技术人才提供了进一步深化和实践的机会。 多媒体技术是集图像、声音、视频...

    胡晓松:云计算在促进技术与教育深度融合中的作用

    胡晓松作为北京开放大学的代表,强调了开放大学应当坚持开放、共享、协作、选择和应用的原则,并致力于开展公共服务。这与云计算的核心精神不谋而合,云计算的开放性能够使得开放大学的资源和服务得到更广泛的共享和...

    DLT 5222-2005 导体和电器选择设计技术规定.pdf

    《DLT 5222-2005 导体和电器选择设计技术规定》是中国电力行业的一份重要标准,旨在规范电气工程中的导体和电器的选择与设计过程,确保电气系统的安全、稳定和高效运行。这份标准适用于各类电压等级的电力系统,包括...

    软件测试原书第2版

    软件测试原书第2版 作者佩腾

    产品经理数据分析手册(于晓松).pdf

    数据分析

    1997-2020年各省三废排放量和熵值法计算的环境规制综合指数(无缺失值)

    1997-2020年各省三废排放量和环境规制综合指数(熵值法合成工业三废) 包括30个省份 包括工业二氧化硫排放量、工业烟尘排放量和工业废水排放量 环境规制综合指数是由工业废水排放量、工业 SO2 排放量以及工业烟尘...

    1997-2020年各省三废排放量和环境规制综合指数(熵值法合成工业三废)

    1997-2020年各省三废排放量和环境规制综合指数(熵值法合成工业三废) 环境 规制综合指数是由工业废水排放量、工业 SO2 排放量以及工业烟尘排放量计算而来( 表格中有详细的三废排放量及具体计算过程和公式) 具体...

    互评-team20-软件需求规格说明书-问题清单1

    《图书管理系统需求规格说明书》是软件开发过程中至关重要的文档,它详细定义了系统应具备的功能、性能、接口和约束等需求。本问题清单主要针对该文档的V1.2版本,旨在识别并解决存在的问题,确保项目的顺利进行。 ...

    基于WINCC的连铸连轧监控系统的设计及实现.pdf

    软件环境包括Windows XP+SP2、STEP 7 V5.4+SP1、WINCC V6.0 SP3+Hotfix2、SQL Server 2000 SP3、S7-PLC SIM V5.2和D7-SYS V6.0等。 【系统功能】 - 实时监控:系统能实时监测CSP(薄板坯连铸连轧)的生产过程,包括...

    浅谈永锦选煤厂节能减排实践

    例如,通过优化工艺流程的配置,利用“1+1”和“2+2”的方法,可以有效降低单位产品的能耗和水耗。此外,还有其他节能措施,如合理利用工艺中的各个环节,减少不必要的物料搬运,以及控制生产流程中的能耗点,达到...

    2006-2019 地级市能源消耗量、煤炭占比、二氧化碳排放量

    本文借鉴采用《中国城市统计年鉴》公布的天然气和液化 石油气,全社会用电量,城市供热(蒸汽供热、火力电厂供热)四部分能源消耗量,通过标 准煤折算系数得到能源消耗总量。 煤炭占比采用两种方法: 1.包括城市供热...

    华中科技大学数学与机械学博士生交叉学科创新论坛.pdf

    2. **学习数学和运用数学** - 高小山研究员的报告,展示了如何将数学理论应用于实际问题,如数控加工的时间最优插补算法。 3. **非线性数学物理方程** - 施保昌和甘文峰等教授的研究,讨论了在制造优化和介观格子...

    基于WINCC的连铸连轧监控系统的设计与实现.pdf

    - **主板插槽**: 4个ISA插槽和2个PCI插槽 - **通讯卡**: MPI、SINECL2或SINECHI(根据需求选择) - **监控画面布局**:如图3所示,CSP连铸连轧生产线监控系统被划分为三个主要区域:顶部显示区、主监控画面区和...

Global site tag (gtag.js) - Google Analytics