Struts标签--logic标签

转载 2013年12月06日 13:49:25

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标签。



struts1标签Logic使用举例

1.  logic:empty            该标签是用来判断是否为空的。如果为空,该标签体中嵌入的内容就会被处理。该标签用于以下情况:          1)当Java对象为null时;...
  • yucaifu1989
  • yucaifu1989
  • 2014年09月25日 12:04
  • 1456

struts的logic标签库

...
  • youren_zt
  • youren_zt
  • 2016年08月07日 18:14
  • 138

struts技术的logic标签

(转自)struts技术的logic标签                              开源项目最好的是可以让我们从项目的源码本身角度看项目,通过对源码的了解更多的是对设计思想融会贯通...
  • dongfangbubai1
  • dongfangbubai1
  • 2013年08月05日 09:09
  • 503

Struts标签入门

Struts标签入门 基本概述     Struts 是 Apache Jakarta 的一个著名的开源项目,目标是为构建基于 Java 的 web 应用程序提供一个框架。Struts 提...
  • q547550831
  • q547550831
  • 2016年01月26日 12:50
  • 1598

Struts标签库详解,非常好的Struts标签详解

本文转自:http://hi.baidu.com/xzkcz/blog/item/5cf9f91f01beb9f4e0fe0bd4.html 作者:xzkcz Struts提供了五个标签库...
  • sunqing0316
  • sunqing0316
  • 2015年09月19日 14:08
  • 9528

Struts2标签使用原理解疑

在笔者下载的Struts2的包中,读者可以在/lib下找到struts2-core-2.0.11.1.jar包,解压该包在其根目录下的 /META-INF文件夹下可以看到一个名字为“struts-ta...
  • Baple
  • Baple
  • 2013年11月27日 13:04
  • 1150

Struts1标签之logic标签

Logic标签大部分的功能是对属性值进行判断,相等后就可以进行设置内容 1.数值比较标签集:以下六个标签都是用于比较数值的标签 关键字:logic:equal/notequal/greater...
  • frost131314
  • frost131314
  • 2013年03月06日 15:06
  • 1767

Struts2中s标签的用法

A: -----超链接,类似于html里的 -----执行一个view里面的一个action -----如果action的errors有值那么显示出来 -----如果actio...
  • u013470578
  • u013470578
  • 2014年05月20日 19:49
  • 2699

Struts2标签库常用标签

Struts2标签库常用标签 基本概述      对于一个MVC框架而言,重点是实现两部分:业务逻辑控制器部分和视图页面部分。Struts2作为一个优秀的MVC框架,也把重点放在了这两部分上。控制...
  • q547550831
  • q547550831
  • 2016年11月24日 21:01
  • 8901

Struts2标签<1>-HTML标签与struts2标签区别

一)struts2中的HTML标签与用原始的hteml标签哪个更好?有什么区别?为什么要使用上struts2标签? 1)应该根据实际情况的选取,当你的标签中出现了action返回的参数,选用stru...
  • xiu2016
  • xiu2016
  • 2016年10月14日 14:08
  • 1158
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts标签--logic标签
举报原因:
原因补充:

(最多只允许输入30个字)