logic:iteratelogic:iterate標(biāo)簽用來迭代集合,您可以使用如下方式來為這個標(biāo)簽指定其要疊代的集合:
上面所提到的集合可以是:
如果您疊代的集合中含有null的值,這時需要采取一定的措施,因為這時logic:iterate不會在page作用域中創(chuàng)建對象。一般是使用<logic:present>標(biāo)簽或<logic:notPresent>標(biāo)簽來判斷一下。 下面是logic:iterate疊代ArrayList的示例的對象引用關(guān)系和部分代碼:
![]()
圖中的persons列表是在ListAction中填充的,在這里只是簡單的加入了三個Person對象,在實際的應(yīng)用中這些數(shù)據(jù)應(yīng)該取自數(shù)據(jù)庫。具體的代碼如下: 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"); } 標(biāo)簽輸出的結(jié)果為: 00001-->趙辰 00002-->李為芳 00003-->王微 logic:present如果指定的值出現(xiàn)該標(biāo)簽就會創(chuàng)建其標(biāo)簽體內(nèi)的內(nèi)容。該標(biāo)簽用于以下情況:
下面的代碼示例了logic:present標(biāo)簽檢查具有指定名稱User-Agent的header是否出現(xiàn): <logic:present header="User-Agent"> 您的瀏覽器是<bean:header id="userAgent" name="User-Agent"/> <bean:write name="userAgent"/>。<br/> </logic:present> logic:notPresent標(biāo)簽的應(yīng)用正好和logic:present標(biāo)簽相反。 logic:messagesPresentlogic:messagesPresent標(biāo)簽用于以下情況:
標(biāo)簽的message屬性值為true時將以Globals.MESSAGE_KEY為key在request作用域中查找Message,其它情況下,將name的值作為key查找,如果name 沒有出現(xiàn),默認值為Globals.ERROR_KEY。 下面的代碼示例了logic:messagesPresent標(biāo)簽的典型用法: <logic:messagesPresent> <ul> <html:messages id="message"> <li><bean:write name="message"/></li> </html:messages> </ul> </logic:messagesPresent> 標(biāo)簽logic:messagesNotPresent的應(yīng)用正好和logic:messagesPresent的應(yīng)用相反。 logic:emptylogic:empty標(biāo)簽是用來判斷是否為空的。如果為空,該標(biāo)簽體中嵌入的內(nèi)容就會被處理。該標(biāo)簽用于以下情況:
下面的代碼示例了logic:empty標(biāo)簽判斷集合persons是否為空: <logic:empty name="listForm" property = "persons"> <div>集合persons為空!</div> </logic:empty> logic:notEmpty標(biāo)簽的應(yīng)用正好和logic:empty標(biāo)簽相反。 logic:matchlogic:match標(biāo)簽用來處理子串匹配問題。 如果指定的值匹配該標(biāo)簽就會創(chuàng)建其標(biāo)簽體內(nèi)的內(nèi)容。該標(biāo)簽用于以下情況:
下面的代碼示例了logic:match標(biāo)簽的典型用法: <logic:present header="User-Agent"> <logic:match header="User-Agent" value="MSIE 6.0"> MS IE 6.0 </logic:match> </logic:present> logic:notMatch標(biāo)簽的應(yīng)用正好和logic:match標(biāo)簽相反。 logic:equal這里要介紹的不只是logic:equal(=)標(biāo)簽,而是要介紹一類標(biāo)簽,這類標(biāo)簽完成比較運算,包括:
該類標(biāo)簽的用法類似,我們只介紹logic:equal標(biāo)簽,其它的留給您自己去完成。 logic:equal是用來判斷是否相等的。如果相等,該標(biāo)簽體中嵌入的內(nèi)容就會被處理。該標(biāo)簽用于以下情況:
logic:forward我覺得將forward和redirect這兩個動作放到一起對比著介紹更加有利于理解,基于此原因也就將logic:forward和logic:redirect這兩個標(biāo)簽也拿到這里一起介紹了。 讓我們看看這兩個動作的區(qū)別:
redirect比forward慢,因為瀏覽器要做二次請求。還有就是要注意,在第一次的請求作用域(request作用域)內(nèi)的bean對于第二次請求是不可見的。 理解了上面描述的區(qū)別也就知道了什么時候該選用logic:forward標(biāo)簽什么時候該選用logic:redirect標(biāo)簽了。logic:forward標(biāo)簽完成PageContext.forward()或HttpServletResponse.sendRedirect(),如何選擇由控制器決定。logic:redirect標(biāo)簽完成HttpServletResponse.sendRedirect()。 在使用logic:redirect標(biāo)簽時我們可以向使用html:link一樣構(gòu)造baseurl和query參數(shù)。如果您感興趣可以參考html:link標(biāo)簽。 |