logic:iteratelogic:iterate标签用来迭代集合,您可以使用如下方式来为这个标签指定其要叠代的集合:
上面所提到的集合可以是:
如果您叠代的集合中含有null的值,这时需要采取一定的措施,因为这时logic:iterate不会在page作用域中创建对象。一般是使用<logic:present>标签或<logic:notPresent>标签来判断一下。 下面是logic:iterate叠代ArrayList的示例的对象引用关系和部分代码:
图中的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如果指定的值出现该标签就会创建其标签体内的内容。该标签用于以下情况:
下面的代码示例了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:messagesPresentlogic:messagesPresent标签用于以下情况:
标签的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:emptylogic:empty标签是用来判断是否为空的。如果为空,该标签体中嵌入的内容就会被处理。该标签用于以下情况:
下面的代码示例了logic:empty标签判断集合persons是否为空: <logic:empty name="listForm" property = "persons"> <div>集合persons为空!</div> </logic:empty> logic:notEmpty标签的应用正好和logic:empty标签相反。 logic:matchlogic:match标签用来处理子串匹配问题。 如果指定的值匹配该标签就会创建其标签体内的内容。该标签用于以下情况:
下面的代码示例了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:equal是用来判断是否相等的。如果相等,该标签体中嵌入的内容就会被处理。该标签用于以下情况:
logic:forward我觉得将forward和redirect这两个动作放到一起对比着介绍更加有利于理解,基于此原因也就将logic:forward和logic:redirect这两个标签也拿到这里一起介绍了。 让我们看看这两个动作的区别:
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标签。 |