Struts2 <s:if>标签使用详解与示例

需积分: 34 1 下载量 82 浏览量 更新于2024-09-19 收藏 2KB TXT 举报
"本文主要介绍Struts2框架中`s:if`标签的使用方法和示例,通过OGNL表达式进行条件判断。" 在Struts2框架中,`<s:if>`标签用于进行条件判断,它允许开发者根据变量的值来决定是否执行特定的代码块。`<s:if>`标签是基于OGNL(Object-Graph Navigation Language)表达式进行工作的,OGNL是Struts2中强大的数据访问和表达式语言。 一、OGNL与ValueStack OGNL是Struts2的核心部分,它用来获取和设置Action上下文中的属性值。ValueStack是Struts2中处理请求数据的一种机制,它是一个对象栈,将Action实例及其属性、拦截器返回的对象等压入栈中,方便在视图层访问。 二、JSP与OGNL 在JSP页面中,通常使用OGNL来访问Action中的属性。例如,要获取`person`对象的`address`属性的`ip`字段,JSTL表达式写法是`${person.address.ip}`,而在Struts2中,使用OGNL表达式则写作`#person.address.ip`。 三、`<s:if>`标签的使用 1. 基本用法:`<s:if test="expression">...<s:if>` `expression`是OGNL表达式,用于判断条件。例如,检查变量`china`的值是否等于`china`: ``` <s:set name='china' value='china'/> <s:if test="${china=='china'}">show</s:if> <s:else>not show</s:else> ``` 如果`china`等于`china`,则显示`show`,否则显示`not show`。 2. 数值比较:例如,判断变量`count`是否大于0: ``` <s:set name="count" value="99"/> <s:if test="${count>0}">bigger than 0</s:if> <s:else>not bigger than 0</s:else> ``` 当`count`大于0时,显示`bigger than 0`,否则显示`not bigger than 0`。 四、使用`s:iterator`与`s:if` 当需要遍历集合并进行条件判断时,可以结合`s:iterator`和`s:if`标签使用。例如,遍历一个名为`label`的List,并判断每个`Attribu`对象的`attrValueId`是否不等于0: ``` <s:iterator id="id" value="label"> <s:if test="%{#id.attrValueId!=0}"> <s:property value="#id.attrValue"/> <s:property value="#id.countAll"/><s:property value="#id.countRequest"/> </s:if> <s:else> <s:property value="#id.attrValue"/> </s:else> </s:iterator> ``` 这段代码会显示`attrValueId`不为0的`Attribu`对象的`attrValue`,以及`countAll`和`countRequest`。 五、检查请求参数或JavaBean属性 1. 检查请求参数是否存在:如检查`request`域中的`price`属性是否为空或小于等于0: ``` <s:if test="request.price==null||request.price<=0"> </s:if> ``` 2. 检查JavaBean属性:如果JavaBean的属性`aTransactionSummaryBean`不为空,可以这样判断: ``` <s:if test="%{aTransactionSummaryBean!=null}"> </s:if> ``` 六、逻辑操作符与条件组合 `s:if`标签支持逻辑操作符,如`&&`(与),`||`(或),`!`(非)。例如,判断`isShowAll`属性为`Y`或者`n`时: ``` <s:if test='%{isShowAll=="Y"||isShowAll=="n"}'> </s:if> ``` 总结,Struts2的`s:if`标签提供了灵活的条件判断能力,结合OGNL,可以实现对Action属性、请求参数、集合元素等的复杂逻辑判断,极大地简化了JSP页面中的条件控制逻辑。
2009-04-10 上传
<s:set name="actorRef" value="actorId" /> <s:set name="taskName" value="name" /> <s:if test="#actorRef=='' or #actorRef==null">共享任务(" >我来处理)</s:if> <s:elseif test='{#taskName == "受评对象准备评级资料"}'> ">准备资料 </s:elseif> <s:else> <s:property value="#taskName" /> </s:else>