struts标签之logic手册

logic:iterate
logic:iterate
标签用来迭代集合,您可以使用如下方式来为这个标签指定其要叠代的集合:
使用一个运行时表达式,这个表达式的值是一个集合。 name 属性引用一个 JSP Bean ,这个 JSP Bean 本身就是一个集合。 name 属性引用一个 JSP Bean ,这个 JSP Bean 的一个属性是一个集合,这时可以联合使用 property 来指定这个集合。 上面所提到的集合可以是:
对象类型或原子类型的数组 (Array)
java.util.Collection
的实现,包括 ArrayList Vector
java.util.Enumeration
的实现。
java.util.Iterator
的实现。
java.util.Map
的实现,包括 HashMap Hashtable TreeMap 如果您叠代的集合中含有 null 的值,这时需要采取一定的措施,因为这时 logic:iterate 不会在 page 作用域中创建对象。一般是使用 <logic:present> 标签或 <logic:notPresent> 标签来判断一下。
下面是 logic:iterate 叠代 ArrayList 的示例的对象引用关系和部分代码:

图示 3. logic:iterate 中对象的引用关系
图中的 persons 列表是在 ListAction 中填充的,在这里只是简单的加入了三个 Person 对象,在实际的应用中这些数据应该取自数据库。具体的代码如下:

public ActionForward execute(ActionMapping mapping,ActionForm form,
HttpServletRequest request, HttpServletResponse response) {

ListForm listForm = (ListForm) form;

List<Person> persons = new ArrayList<Person>();

Person person1 = new Person();
person1.setId("00001");
person1.setName("
赵辰 ");

Person person2 = new Person();
person2.setId("00002");
person2.setName("
李为芳 ");

Person person3 = new Person();
person3.setId("00003");
person3.setName("
王微 ");

persons.add(person1);
persons.add(person2);
persons.add(person3);

listForm.setPersons(persons);

return mapping.findForward("success");
}
标签输出的结果为:

00001-->
赵辰
00002-->
李为芳
00003-->
王微
回页首
logic:present
如果指定的值出现该标签就会创建其标签体内的内容。该标签用于以下情况:
检查具有指定名称的 cookie 是否出现。 检查具有指定名称的 header 是否出现。 检查具有指定名称的 JSP Bean 是否出现 检查具有指定名称的 JSP Bean 中的 property 属性是否出现。 检查 request 中指定名称的参数是否出现。 检查当前的认证用户是否与指定的安全角色相关联。 检查当前认证的主体是否具有指定的名字。 下面的代码示例了 logic:present 标签检查具有指定名称 User-Agent header 是否出现:

<logic:present header="User-Agent">
您的浏览器是 <bean:header id="userAgent" name="User-Agent"/>
<bean:write name="userAgent"/>
<br/>
</logic:present>

logic:notPresent
标签的应用正好和 logic:present 标签相反。
回页首
logic:messagesPresent
logic:messagesPresent
标签用于以下情况:
request 作用域中存在一个 ActionMessages 对象,标签的 property 属性和 ActionMessages 中的 property 对应。 request 作用域中存在一个 ActionErrors 对象,标签的 property 属性和 ActionErrors 中的 property 对应。 存在一个 String 对象,将其转换 ( 构造 ) ActionMessage 然后在添加到 ActionMessages 中。 存在一个 String Array 对象,将数组中的每一个 String 转换成一个 ActionMessage ,在将其添加到 ActionMessages 中。 标签的 message 属性值为 true 时将以 Globals.MESSAGE_KEY key request 作用域中查找 Message ,其它情况下,将 name 的值作为 key 查找,如果 name 没有出现,默认值为 Globals.ERROR_KEY
下面的代码示例了 logic:messagesPresent 标签的典型用法:

<logic:messagesPresent>
<ul>
<html:messages id="message">
<li><bean:write name="message"/></li>
</html:messages>
</ul>
</logic:messagesPresent>
标签 logic:messagesNotPresent 的应用正好和 logic:messagesPresent 的应用相反。
回页首
logic:empty
logic:empty
标签是用来判断是否为空的。如果为空,该标签体中嵌入的内容就会被处理。该标签用于以下情况:
Java 对象为 null String 对象为 "" java.util.Collection 对象中的 isEmpty() 返回 true java.util.Map 对象中的 isEmpty() 返回 true 下面的代码示例了 logic:empty 标签判断集合 persons 是否为空:

<logic:empty name="listForm" property = "persons">
<div>
集合 persons 为空 !</div>
</logic:empty>

logic:notEmpty
标签的应用正好和 logic:empty 标签相反。
回页首
logic:match
logic:match
标签用来处理子串匹配问题。
如果指定的值匹配该标签就会创建其标签体内的内容。该标签用于以下情况:
检查具有指定名称的 cookie 是否与该标签的 value 匹配。 检查具有指定名称的 header 是否与该标签的 value 匹配。 检查具有指定名称的 JSP Bean 是否与该标签的 value 匹配 检查具有指定名称的 JSP Bean 中的 property 属性值是否与该标签的 value 匹配。 检查 request 中指定名称的参数值是否与该标签的 value 匹配。
下面的代码示例了 logic:match 标签的典型用法:

<logic:present header="User-Agent">
<logic:match header="User-Agent" value="MSIE 6.0">
MS IE 6.0
</logic:match>
</logic:present>

logic:notMatch
标签的应用正好和 logic:match 标签相反。
回页首
logic:equal
这里要介绍的不只是 logic:equal(=) 标签,而是要介绍一类标签,这类标签完成比较运算,包括:

logic:equal(=)
logic:notEqual(!=)
logic:greaterEqual(>=)
logic:lessEqual(<=)
logic:graterThan(>)
logic:lessThan(<)
该类标签的用法类似,我们只介绍 logic:equal 标签,其它的留给您自己去完成。

logic:equal
是用来判断是否相等的。如果相等,该标签体中嵌入的内容就会被处理。该标签用于以下情况:
比较由该标签的 cookie 属性指定的 cookie 的值是否与该标签的 value 属性值相等。 比较由该标签的 header 属性指定的 header 的值是否与该标签的 value 属性值相等。 比较由该标签的 name 属性指定的 JSP Bean 是否与该标签的 value 属性值相等 (property 属性不出现 ) 或比较由该标签的 name 属性指定的 JSP Bean 中的 property 属性值是否与该标签的 value 属性值相等。 比较由该标签的 parameter 属性指定的参数值 (request ) 是否与该标签的 value 属性值相等。 回页首
logic:forward
我觉得将 forward redirect 这两个动作放到一起对比着介绍更加有利于理解,基于此原因也就将 logic:forward logic:redirect 这两个标签也拿到这里一起介绍了。
让我们看看这两个动作的区别:

forward
是在 servlet 内部执行,浏览器完全不会感知到这个动作,原始的 url 也不会改变,浏览器重新装载的话也只是对原始的请求进行简单的重复。
redirect
则分成两个步骤:第一步是 web 应用程序告诉浏览器第二个 url ,然后浏览器向第二个 url 发送请求。

redirect
forward 慢,因为浏览器要做二次请求。还有就是要注意,在第一次的请求作用域 (request 作用域 ) 内的 bean 对于第二次请求是不可见的。
理解了上面描述的区别也就知道了什么时候该选用 logic:forward 标签什么时候该选用 logic:redirect 标签了。 logic:forward 标签完成 PageContext.forward() HttpServletResponse.sendRedirect() ,如何选择由控制器决定。 logic:redirect 标签完成 HttpServletResponse.sendRedirect()
在使用 logic:redirect 标签时我们可以向使用 html:link 一样构造 baseurl query 参数。如果您感兴趣可以参考 html:link 标签。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值