Struts之logic标签库详解_java

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

时间: 2024-10-11 03:21:27

Struts之logic标签库详解_java的相关文章

Java的Struts框架中的if/else标签使用详解_java

这些标签执行可在每一种语言找到的一种基本条件流程. 'If'标签可用于本身或与"Else If''标签和/或单/多'Else'标签,如下图所示: <s:if test="%{false}"> <div>Will Not Be Executed</div> </s:if> <s:elseif test="%{true}"> <div>Will Be Executed</div>

marquee标签属性详解

html教程,marquee标签属性详解. 请大家先看下面这段代码 <marquee direction=up behavior=scroll loop=3 scrollamount=1 scrolldelay=10 align=top bgcolor=#ffffff height=300 width=30% hspace=20 vspace=10 onmouseover=this.stop() onmouseout=this.start()> 此处输入滚动内容 </marquee>

CSS标签语法:详解选择符中的关系选择符

文章简介:CSS标签语法:详解选择符中的关系选择符. 相信大家都对CSS选择符都不陌生,选择符包含:元素选择符.关系选择符.属性选择符.伪类选择符.伪对象选择符.在众多的选择符中,可以让我们根据自己的需要更加灵活性的选择合适的选择符来对样式进行编写,达到最大的质量和效率. 今天就为大家介绍下选择符中的关系选择符,"关系"这可是一等一的大事啊,我们得理清楚,这样做事情才能更加的有效率.不然在CSS中有你受的,哈哈.关系选择符有四个类别:包含选择符.子选择符.相邻选择符.兄弟选择符.接下来

nodejs中的fiber(纤程)库详解

 这篇文章主要介绍了nodejs中的fiber(纤程)库详解,本文讲解了node-fibers的安装.API介绍.方法使用示例等内容,需要的朋友可以参考下     fiber/纤程 在操作系统中,除了进程和线程外,还有一种较少应用的纤程(fiber,也叫协程).纤程常常拿来跟线程做对比,对于操作系统而言,它们都是较轻量级的运行态.通常认为纤程比线程更为轻量,开销更小.不同之处在于,纤程是由线程或纤程创建的,纤程调度完全由用户代码控制,对系统内核而言,是一种非抢占性的调度方式,纤程实现了合作式的多

格式-html5开发meta标签求详解

问题描述 html5开发meta标签求详解 html5里meta标签到底该怎么理解?开发pc网站与开发移动网站,我发现meta里的内容大不一样,但是我学到的教程里貌似没有移动平台里那么多的陌生东西啊,比如< meta name="viewport" content="width=device-width,height=device-height, user-scalable=no,initial-scale=1, minimum-scale=1, maximum-sca

VMware 虚拟化编程(7) — VixDiskLib 虚拟磁盘库详解之三

目录 目录 前文列表 VixDiskLib 虚拟磁盘库 VixDiskLib_GetMetadataKeys VixDiskLib_ReadMetadata 获取虚拟磁盘元数据 VixDiskLib_WriteMetadata 更新虚拟磁盘元数据表 VixDiskLib_Create 创建新的寄宿磁盘 Hosted Disk VixDiskLib_Clone 克隆 VMDK File 创建新的托管磁盘 Managed Disk VixDiskLib_Unlink 删除 VMDK File Vix

strutsjava-谁有struts 基础案例与开发详解 源码?

问题描述 谁有struts 基础案例与开发详解 源码? 谁有 struts 基础案例与开发详解 源码 ,丛书主编:张孝祥 徐明华 跪求

JavaWeb Struts文件上传功能实现详解_java

一.Struts文件上传的思路之前也讲过了FileUpload这个组件,功能很强大,但是操作繁琐复杂.这次,在Strust中也对文件上传有所支持,并FileUpload进行了包装,用起来方便了许多. 这里涉及到了一个标签和一个类:<html:file property="对应ActionForm中的属性名称">用这个标签可以上传文件,但是要接收次内容必须依靠org.apache.struts.upload.FormFile 接口完成. 二.实现sh.jsp: <%@

Struts 2中的constant配置详解_java

1.<constant name="struts.i18n.encoding" value="UTF-8" /> 指定Web应用的默认编码集,相当于调用 HttpServletRequest的setCharacterEncoding方法. 2.<constant name="struts.i18n.reload" value="false"/> 该属性设置是否每次HTTP请求到达时,系统都重新加载资源文