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