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文件中全局转向 
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 
此标签比较对象是否相等; 
logic:match标签用来处理子串匹配问题。

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

检查具有指定名称的cookie是否与该标签的value匹配。 
检查具有指定名称的header是否与该标签的value匹配。 
检查具有指定名称的JSP Bean是否与该标签的value匹配 或 检查具有指定名称的JSP Bean中的property属性值是否与该标签的value匹配。 
检查request中指定名称的参数值是否与该标签的value匹配。

下面的代码示例了logic:match标签的典型用法: 
eg0. 
<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:write name="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 a user-agent header. 
</logic:present> 
eg4. 
下面的代码示例了logic:present标签检查具有指定名称User-Agent的header是否出现:

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

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

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

16. logic:iterator 
用于显示列表为collection的值(List ,ArrayList,HashMap等)。 
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-->王微

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

转载来自:http://cnychao.iteye.com/blog/1297278

转载于:https://www.cnblogs.com/fjg-jhrs/p/6038070.html

Struts之logic标签库详解(转载)相关推荐

  1. Android标签库,JSP Struts之HTML标签库详解 _Android/移动互联网/物联网/_夜鹰教程网...

    标签库 说明 HTML 标签 用来创建能够和 Struts 框架和其他相应的 HTML 标签交互的 HTML 输入表单 Bean 标签 在访问 JavaBeans 及其属性,以及定义一个新的 bean ...

  2. Struts 2 标签库详解

    2019独角兽企业重金招聘Python工程师标准>>> Struts提供了五个标签库,即:HTML.Bean.Logic.Template和Nested. HTML 标签:      ...

  3. struts2教程--标签库详解

    struts2 标签库 tag-reference.html 就是 struts2标签规范 一. 通用标签库 的学习 <s:property> 解析ognl表达式,设置默认值,设置内容是否 ...

  4. Eclipse配置jstl标准标签库详解

    安装JSTL1.2 日期:2017-06-27 下载jstl1.2版本,下载地址:http://repo2.maven.org/maven2/javax/servlet/jstl/ 用压缩包打开jst ...

  5. Spring MVC的表单标签库详解

    表单标签库中包含了可以用在 JSP 页面中渲染 HTML 元素的标签.在 JSP 页面使用 Spring 表单标签库时,必须在 JSP 页面开头处声明 taglib 指令,指令代码如下: <%@ ...

  6. JSTL : 标签库详解

    以下内容仅供学习使用! 目录 JSTL 简介 JSTL 安装与使用 一.JSTL标签库 分类 二.核心标签 核心标签库使用说明 表达式控制标签 流程控制标签 循环标签 URL操作标签 三.格式化标签 ...

  7. 自定义标签JSTL标签库详解

     自定义标签是JavaWeb的一部分非常重要的核心功能,我们之前就说过,JSP规范说的很清楚,就是Jsp页面中禁止编写一行Java代码,就是最好不要有Java脚本片段,下面就来看一下自定义标签的简 ...

  8. python gpu加速库比matlab快吗_Python之Unittest和Requests库详解

    1.按类来执行 import unittest class f1(unittest.TestCase): def setUp(self): pass def tearDown(self): pass ...

  9. matlab中sinks,MATLAB Simulink模块库详解(二)Sinks篇

    MATLAB Simulink模块库详解(二)Sinks篇 Simulink模块库概述 1.Sources模块库,为仿真提供各种信号源 2.Sinks模块库,为仿真提供输出设备元件 3.Continu ...

  10. Python Urllib库详解

    Urllib库详解 什么是Urllib? Python内置的HTTP请求库 urllib.request 请求模块 urllib.error 异常处理模块 urllib.parse url解析模块 u ...

最新文章

  1. 剑指offer:面试题28. 对称的二叉树
  2. 常用网站--前端开发类+网页设计类+平面素材类+flash类
  3. android 模拟点击localinstrumentation,Android Instrumentation模拟鼠标点击事件
  4. oracle,导入,导出数据
  5. Matlab计时函数的使用
  6. 【Linux】13.linux内核切换
  7. 图解 CSS (9): 列表
  8. linux – 我怎么知道我到somaxconn有多近?
  9. linux week3
  10. 用Eclipse进行C/C++开发
  11. 中国蚁剑 代码解压出错:【object Object】解决方法
  12. 性能测试四十五:性能测试策略
  13. 教你玩转CSS 下拉菜单
  14. 23种计模式之Python实现(史上最全最通俗易懂)内容整改中
  15. 简单聊聊模型的性能评估标准
  16. 删了自己写的代码?判刑10个月!
  17. lintcode:子数组之和为0
  18. 数据库索引与视图实验
  19. 新浪xweibo代码架构分析(二次开发)
  20. 免费的MySQL数据库

热门文章

  1. sqlalchemy连接和关闭数据库
  2. ubuntu 备份mysql数据库_Ubuntu Server下MySql数据库备份脚本代码
  3. Java中关于HashMap的使用和遍历
  4. 透過 OpenNI / NITE 分析人體骨架(下)
  5. 常用算法之-快速排序
  6. 【2019南昌邀请赛网络赛 B Greedy HOUHOU BZOJ 2957 楼房重建】线段树+二分
  7. 网易2018校招内推编程题 小易喜欢的数列
  8. java添加录音,大家说说java程序里怎么插入视频和音频啊
  9. WinPmem:跨平台内存采集工具
  10. 【不能执行已释放的 sript 代码】 已解决 命名【疾风】