`

struts logic 标签详解

阅读更多

1. logic:empty
该标签是用来判断是否为空的。如果为空,该标签体中嵌入的内容就会被处理。该标签用于以下情况:
1)当Java对象为null时;
2)当String对象为""时;
3)当java.util.Collection对象中的isEmpty()返回true时;
4)当java.util.Map对象中的isEmpty()返回true时。
eg.

该句等同于:
if (userList.isEmpty()) {
...
}

2. logic:notEmpty
该标签的应用正好和logic:empty标签相反。

3. logic:equal
该标签为等于比较符。
eg1. 比较用户的状态属性是否1,若为1,输出"启用";
eg2. 如果上例中的value值是动态获得的,例如需要通过bean:write输出,因struts不支持标签嵌套,可采用EL来解决该问题。

4. logic:notEqual
该标签意义与logic:equal相反,使用方法类似,略。

5. logic:forward
该标签用于实现页面导向,查找配置文件的全局forward。struts-config.xml文件中全局转向
eg. <logic:forward name="redirect"/>

6. logic:greaterEqual
为大于等于比较符。
eg. 当某学生的成绩大于等于60时,输出“及格”:
<logic:greaterEqual name="student" property="scores" value="60">
及格
</logic:greaterEqual>
7. logic:greaterThan
此为大于比较符,使用方法同logic:greaterEqual;
8. logic:lessEqual
此为小于等于比较符,使用方法同logic:greaterEqual;
9. logic:lessThan
此为小于比较符,使用方法同logic:greaterEqual;
10. logic:match
此标签比较对象是否相等;
eg1. 检查在request范围内的name属性是否包含"hello"串:
<logic:match name="name" scope="request" value="hello">
<bean:write name="name"/>中有一个“hello”串。
</logic:match>
eg2. 检查在request范围内的name属性是否已“hello”作为起始字符串:
<logic:match name="name" scope="request" value="hello" location="start">
<bean:write name="name"/>以“hello”作为起始字符串。
</logic:match>
eg3.
<logic:match header="user-agent" value="Windows">
你运行的是Windows系统
</logic:match>
11. logic:notMatch
此标签用于比较对象是否不相同,与logic:match意义相反,使用方法类似

12. logic:messagePresent
该标签用于判断ActionMessages/ActionErrors对象是否存在;
eg. 如果存在error信息,将其全部输出:
<logic:messagePresent property="error">
<html:messages property="error" id="err" >
<bean:write name="err"/>
</html:messages>
</logic:messagePresent >
13. logic:messagesNotPresent
该标签用于判断ActionMessages/ActionErrors对象是否不存在,使用方法与logic:messagePresent类似
14. logic:present
此标签用于判断request对象传递参数是否存在。
eg1. user对象和它的name属性在request中都存在时,输出相应字符串:
<logic:present name="user" property="name">
user对象和该对象的name属性都存在
</logic:present>
eg2. 若有一个名字为“hello”的JavaBean,输出对应字符串:
<logic:present name="hello" >
有一个名字为“hello”的JavaBean。
</logic:present>
eg3.
<logic:present header="user-agent">
we got a user-agent header.
</logic:present>
15. logic:notPresent
此标签用于判断request对象传递参数是否不存在,意义与了logic:present相反,使用方法类似。
16. logic:iterator
用于显示列表为collection的值(List ,ArrayList,HashMap等)。
eg1. 逐一输出用户列表(empList)中用户的姓名:
<logic:iterate id="emp" name="empList">
<bean:write name="emp" property="name"/><br>
</logic:iterate>
eg2. 从用户列表中输出从1开始的两个用户的姓名
<logic:iterate id="emp" name="empList" indexId="index" offset="1" length="2">
<bean:write name="index"/>.<bean:write name="emp" property="name"/><br>
</logic:iterate>
eg3. logic:iterator标签的嵌套举例
<logic:iterate id="emp" indexId="index" name="empList">
<bean:write name="index"/>. <bean:write name="emp" property="name"/><br>
<logic:iterate id="address" name="emp" property="addressList" length="3" offset="1">
<bean:write name="address"/><br>
</logic:iterate>
</logic:iterate>
17. logic:redirect
该标签用于实现页面转向,可传递参数。
eg. <logic:redirect href="http://www.iteye.com"/>

 

 

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中对象的引用关系

struts logic - StaR - StaR 的博客


图中的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自定义标签详解

    Struts 是一个强大的Java Web应用程序开发框架,它提供了一套丰富的自定义标签库,使得开发者在构建用户界面时能够更加方便地处理业务逻辑和数据展示。本文将详细讲解Struts中的Bean Tags、HTML Tags和Logic Tags的...

    struts1标签库详解

    Struts1 标签库详解 Struts1 标签库是 Apache Jakarta 的一个著名的开源项目,目标是为构建基于 Java 的 web 应用程序提供一个框架。Struts 提供了非常多的标签,依据功能和使用习惯的不同被分到了五个标签库中:...

    struts2标签详解

    ### Struts2 UI标签详解 #### 表单UI标签 表单UI标签主要用来创建HTML表单元素,如文本框、按钮等。它们为开发者提供了一种简洁的方式来生成动态表单,并且可以方便地进行数据绑定和验证。 ##### 示例代码 ```jsp ...

    Struts所有标签详解

    里面包括&lt;html&gt;&lt;bean&gt;&lt;logic&gt;&lt;tiles&gt;&lt;nested&gt; 五组标签库的详细讲解,每个标签库都对应着 相应的例子(标签多的标签库有两个例子)。 另外还有国际化(文字国际化/图片国际化)、 表单验证,以及验证...

    struts标签详解 (实例 很详细(war))

    本压缩包文件包含了关于Struts标签的详细解释和源码,非常适合学习和参考。 1. **HTML标签**: HTML标签主要用于生成常见的HTML元素,如表单元素(`&lt;html:form&gt;`)、文本输入(`&lt;html:text&gt;`)、复选框(`...

    Struts中logic标签的使用

    ### Struts中Logic标签的使用详解 #### 一、引言 在Web开发中,Struts框架因其灵活性和强大的功能而被广泛采用。其中,Logic标签库是Struts框架的一个重要组成部分,它提供了多种用于控制流程和数据处理的标签。...

    struts标签详解

    Struts提供了五个标签库,即:HTML、Bean、Logic、Template和Nested。 HTML 标签 : 用来创建能够和Struts 框架和其他相应的HTML 标签交互的HTML 输入表单 Bean 标签: 在访问JavaBeans 及其属性,以及定义一个新...

    struts2常用标签详解

    首先,我们需要了解Struts2标签库的主要组成部分,它们分为Action、Display、Logic、Field和UI五大类。这些标签提供了丰富的功能,用于处理表单、展示数据、控制流程等。 1. **Action标签**:这类标签主要用于调用...

    Struts标签库详解

    ### Struts标签库详解 #### 一、Struts标签库概览 Struts是一个用于构建企业级Java Web应用的强大框架,其核心特性之一是提供了一系列的标签库来简化开发过程。Struts提供的五个主要标签库包括HTML、Bean、Logic、...

    Struts配置及标签库详解

    3. `struts-logic.tld`:Logic标签库,提供了一些逻辑控制标签,如条件判断(`&lt;logic:equal&gt;`)、循环(`&lt;logic:iterate&gt;`)、导航(`&lt;logic:forward&gt;`)等,帮助开发者在JSP页面中实现复杂的业务逻辑。 4. `struts-...

    struts1.x标签详解

    ### Struts1.x 标签详解 #### 一、引言 Struts 是 Apache Jakarta 的一个著名开源项目,旨在为构建基于 Java 的 Web 应用程序提供一个强大的框架。Struts 提供了大量的标签来帮助开发者简化开发过程。本文将详细...

    struts1标签中文详解

    Struts1的标签库包括HTML、Bean、Logic、Template和Nested五个部分。 1. HTML标签库: - `&lt;html:base&gt;`:设置页面的基础URL,用于构建相对链接的绝对路径。 - `&lt;html:cancel&gt;`:生成一个取消按钮,点击后跳过表单...

    JSP Struts之HTML标签库详解

    Struts 是一个经典的Java Web开发框架,它提供了一套丰富的标签库来简化JSP页面的编写,特别是对于处理用户输入和展示数据。其中,HTML标签库是Struts中非常重要的一部分,它专门用于创建与Struts框架交互的HTML输入...

    Struts之logic标签库详解

    本文将深入探讨Struts的logic标签库,这个库包含了多种用于控制流程和数据比较的标签。 1. **logic:empty** `logic:empty` 标签用于判断一个对象是否为空。如果对象是null,或者是一个空字符串,或者是一个空的...

    struts1标签库详解.doc

    接下来,Logic Tags库提供了逻辑判断和流程控制的标签,如`&lt;logic:iterate&gt;`用于遍历集合,`&lt;logic:present&gt;`和`&lt;logic:notPresent&gt;`检查指定的bean或请求参数是否存在于当前上下文中,`&lt;logic:equal&gt;`和`&lt;logic:not...

    Struts专用标签库详解

    Struts标签库分为两部分:.struts tags 和 .logic tags。.struts tags 主要用于显示数据和表单处理,而.logic tags 则用于处理页面跳转和逻辑控制。这些标签大大减少了开发者对JSP脚本的依赖,提高了代码的可读性和...

    《精通Java Web整合开发》随书光盘源码__第11章 Struts专用标签库详解

    本章节主要关注第11章,即"Struts专用标签库详解",我们将围绕这一主题展开深入的讨论。 1. **Struts标签库介绍** Struts标签库是用于简化JSP页面开发的一组自定义标签,它们提供了一种更简洁、更面向对象的方式来...

    struts logic:iterater 换行

    在探讨“struts logic:iterater换行”的知识点时,我们首先需要理解Struts框架以及其内嵌的逻辑标签库(Logic Tag Library)中的`&lt;logic:iterate&gt;`标签的使用方式,尤其是如何在迭代过程中实现换行效果。下面将详细...

Global site tag (gtag.js) - Google Analytics