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
标签。
转载 struts标签之logic手册
最新推荐文章于 2021-09-04 10:24:18 发布