1. 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>  

2. logic:notEmpty

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

3. logic:equal

该标签为等于比较符。

eg1. 比较用户的状态属性是否1,若为1,输出"启用";

eg2. 如果上例中的value值是动态获得的,例如需要通过bean:write输出,因struts不支持标签嵌套,可采用EL来解决该问题。

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属性值相等。

4. logic:notEqual

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

5. logic:forward

该标签用于实现页面导向,查找配置文件的全局forward。struts-config.xml文件中全局转向

<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

此标签比较对象是否相等;

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>

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:notMatch标签的应用正好和logic:match标签相反。

此标签用于比较对象是否不相同,与logic:match意义相反,使用方法类似

12. logic:messagePresent

该标签用于判断ActionMessages/ActionErrors对象是否存在;

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标签的典型用法:

eg1.

<logic:messagesPresent>
<ul>
<html:messages id="message">
      <li><bean:writen ame="message"/></li>
</html:messages>
</ul>
</logic:messagesPresent> 

eg2.

如果存在error信息,将其全部输出:

<logic:messagePresent property="error">
      <html:messages property="error" id="err" >
            <bean:write name="err"/>
      </html:messages>
</logic:messagePresent>

13. logic:messagesNotPresent

标签logic:messagesNotPresent的应用正好和logic:messagesPresent的应用相反。

该标签用于判断ActionMessages/ActionErrors对象是否不存在,使用方法与logic:messagePresent类似

14. logic:present

此标签用于判断request对象传递参数是否存在。

如果指定的值出现该标签就会创建其标签体内的内容。该标签用于以下情况:

检查具有指定名称的cookie是否出现。

检查具有指定名称的header是否出现。

检查具有指定名称的JSP Bean是否出现 或 检查具有指定名称的JSP Bean中的property属性是否出现。

检查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 auser-agent header.
</logic:present>

eg4.

下面的代码示例了logic:present标签检查具有指定名称User-Agent的header是否出现:

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

15. logic:notPresent

此标签用于判断request对象传递参数是否不存在,意义与了logic:present相反,使用方法类似。

logic:notPresent标签的应用正好和logic:present标签相反。

16. logic:iterator

用于显示列表为collection的值(List,ArrayList,HashMap等)。

logic:iterate标签用来迭代集合,您可以使用如下方式来为这个标签指定其要叠代的集合:

使用一个运行时表达式,这个表达式的值是一个集合。

用name属性引用一个JSPBean,这个JSP Bean本身就是一个集合。

用name属性引用一个JSPBean,这个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>标签来判断一下。

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-->王微

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.javaeye.com"/>

18. logic:forward和logic:redirect的比较

将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 1 之<logic>标签库的更多相关文章

  1. Struts 1 之<bean>标签库

    <bean:write>标签 <bean:write>能输出request.session.application.page四个域中能访问到的变量,与EL表达式不同的是,如果变 ...

  2. 【转】Struts1.x系列教程(6):Bean标签库

    转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/0 ...

  3. Struts 有哪些常用标签库

    Struts 有哪些常用标签库 1.html标签库 2.bean标签库 3.logic标签库

  4. 菜鸟学习Struts——bean标签库

    一.Struts标签库. Struts实际上包含了4个标签库:bean,logic,html,tiles bean:用来在属性范围中定义或取得属性的,同时可以读取资源文件信息 logic:替代JSTL ...

  5. Struts 1 之<html>标签库

    <html:html>标签 <html:html>标签用于在网页开头生成HTML的<html>元素,它只有一个用于显示用户语言的lang属性: <html:h ...

  6. Struts(22)标签库具体解释

    要使用Struts2的标签,仅仅须要在JSP页面加入例如以下一行定义就可以: <%@ taglib prefix="s" uri="/struts-tags&quo ...

  7. jstl标签库基础教程及其使用代码

    概述 在 JSP 页面中,使用标签库代替传统的 Java 片段语言来实现页面的显示逻辑已经不是新技术了,然而,由自定义标签很容易造成重复定义和非标准的实现.鉴于此,出现了 JSTL ( JSP Sta ...

  8. Struts、JSTL标签库的基本使用方法

    一 使用Struts标签之前需要经过下面3个步骤的配置. 1.导入TLD文件. 2.在web.xml中注册标签库. 3.在页面中引入标签库. 下面详细介绍以上步骤. 1 导入TLD文件. TLD文件是 ...

  9. Struts 有哪些经常使用标签库

    Struts 有哪些经常使用标签库 1.html标签库 2.bean标签库 3.logic标签库

随机推荐

  1. [ Java学习基础 ] Java的封装性与访问控制

    Java面向对象的封装性是通过对成员变量和方法进行访问控制实现的,访问控制分为4个等级:私有.默认.保护和公有,具体规则如下表: 1.私有级别 私有级别的关键字是private,私有级别的成员变量和方 ...

  2. [NOI 2014]起床困难综合症

    Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...

  3. [JSOI2007]文本生成器

    题目描述 JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版. 该软件可以随机生成一些文章―――总是生成一篇长度 ...

  4. USACO 2017 February Platinum

    第二次参加USACO 本来打算2016-2017全勤的 January的好像忘记打了 听群里有人讨论才想起来铂金组三题很有意思,都是两个排列的交叉对问题 我最后得分889/1000(真的菜) T1.W ...

  5. [SPOJ 287] Smart Network Administrator 二分答案+网络流

    The citizens of a small village are tired of being the only inhabitants around without a connection ...

  6. NOIP2014-6-14模拟赛

    Problem 1 抓牛(catchcow.cpp/c/pas) [题目描述] 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N≤1 ...

  7. [Codeforces]860E Arkady and a Nobody-men

    屯一个虚树的板子,顺便总结一下这样的题型. Description 给定一棵n个节点的有根树,在输入数据通过给出每个节点的父亲来表示这棵树.若某个节点的父亲为0,那么该节点即为根.现在对于每个点,询问 ...

  8. bzoj4361isn dp+容斥

    4361: isn Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 370  Solved: 182[Submit][Status][Discuss] ...

  9. ubuntu 16.04常见错误--Could not get lock /var/lib/dpkg/lock解决

    我的博客 ubuntu常见错误--Could not get lock /var/lib/dpkg/lock解决 通过终端安装程序sudo apt-get install xxx时出错: E: Cou ...

  10. python的运算符与表达式

    Python运算符与表达式 1. 运算符分类 运算符主要分5种: 1. 算术运算符 2. 比较运算符 3. 位运算符 4. 逻辑运算符 5. 成员运算符 6. 身份运算符 7. 赋值运算符 1. 算术 ...