相信自己!

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            26 隨筆 :: 3 文章 :: 13 評論 :: 0 Trackbacks
           

          logic:iterate

          logic:iterate標(biāo)簽用來迭代集合,您可以使用如下方式來為這個標(biāo)簽指定其要疊代的集合:

          • 使用一個運行時表達式,這個表達式的值是一個集合。
          • 用name屬性引用一個JSP Bean,這個JSP Bean本身就是一個集合。
          • 用name屬性引用一個JSP Bean,這個JSP Bean的一個屬性是一個集合,這時可以聯(lián)合使用property來指定這個集合。

          上面所提到的集合可以是:

          • 對象類型或原子類型的數(shù)組(Array)。
          • java.util.Collection的實現(xiàn),包括ArrayList,Vector。
          • java.util.Enumeration的實現(xiàn)。
          • java.util.Iterator的實現(xiàn)。
          • java.util.Map的實現(xiàn),包括HashMap,Hashtable和TreeMap。

          如果您疊代的集合中含有null的值,這時需要采取一定的措施,因為這時logic:iterate不會在page作用域中創(chuàng)建對象。一般是使用<logic:present>標(biāo)簽或<logic:notPresent>標(biāo)簽來判斷一下。

          下面是logic:iterate疊代ArrayList的示例的對象引用關(guān)系和部分代碼:

           

          logic:iterate中對象的引用關(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)簽用于以下情況:

          • 檢查具有指定名稱的cookie是否出現(xiàn)。
          • 檢查具有指定名稱的header是否出現(xiàn)。
          • 檢查具有指定名稱的JSP Bean是否出現(xiàn) 或 檢查具有指定名稱的JSP Bean中的property屬性是否出現(xiàn)。
          • 檢查request中指定名稱的參數(shù)是否出現(xiàn)。
          • 檢查當(dāng)前的認證用戶是否與指定的安全角色相關(guān)聯(lián)。
          • 檢查當(dāng)前認證的主體是否具有指定的名字。

          下面的代碼示例了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:messagesPresent

          logic:messagesPresent標(biāo)簽用于以下情況:

          • 在request作用域中存在一個ActionMessages對象,標(biāo)簽的property屬性和ActionMessages中的property對應(yīng)。
          • 在request作用域中存在一個ActionErrors對象,標(biāo)簽的property屬性和ActionErrors中的property對應(yīng)。
          • 存在一個String對象,將其轉(zhuǎn)換(構(gòu)造)成ActionMessage然后在添加到ActionMessages中。
          • 存在一個String Array對象,將數(shù)組中的每一個String轉(zhuǎn)換成一個ActionMessage,在將其添加到ActionMessages中。

          標(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:empty

          logic:empty標(biāo)簽是用來判斷是否為空的。如果為空,該標(biāo)簽體中嵌入的內(nèi)容就會被處理。該標(biāo)簽用于以下情況:

          • 當(dāng)Java對象為null時
          • 當(dāng)String對象為""時
          • 當(dāng)java.util.Collection對象中的isEmpty()返回true時
          • 當(dāng)java.util.Map對象中的isEmpty()返回true時

          下面的代碼示例了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:match

          logic:match標(biāo)簽用來處理子串匹配問題。

          如果指定的值匹配該標(biāo)簽就會創(chuàng)建其標(biāo)簽體內(nèi)的內(nèi)容。該標(biāo)簽用于以下情況:

          • 檢查具有指定名稱的cookie是否與該標(biāo)簽的value匹配。
          • 檢查具有指定名稱的header是否與該標(biāo)簽的value匹配。
          • 檢查具有指定名稱的JSP Bean是否與該標(biāo)簽的value匹配 或 檢查具有指定名稱的JSP Bean中的property屬性值是否與該標(biāo)簽的value匹配。
          • 檢查request中指定名稱的參數(shù)值是否與該標(biāo)簽的value匹配。

           

          下面的代碼示例了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)簽完成比較運算,包括:

          • logic:equal(=)
          • logic:notEqual(!=)
          • logic:greaterEqual(>=)
          • logic:lessEqual(<=)
          • logic:graterThan(>)
          • logic:lessThan(<)

          該類標(biāo)簽的用法類似,我們只介紹logic:equal標(biāo)簽,其它的留給您自己去完成。

          logic:equal是用來判斷是否相等的。如果相等,該標(biāo)簽體中嵌入的內(nèi)容就會被處理。該標(biāo)簽用于以下情況:

          • 比較由該標(biāo)簽的cookie屬性指定的cookie的值是否與該標(biāo)簽的value屬性值相等。
          • 比較由該標(biāo)簽的header屬性指定的header的值是否與該標(biāo)簽的value屬性值相等。
          • 比較由該標(biāo)簽的name屬性指定的JSP Bean是否與該標(biāo)簽的value屬性值相等(property屬性不出現(xiàn))或比較由該標(biāo)簽的name屬性指定的JSP Bean中的property屬性值是否與該標(biāo)簽的value屬性值相等。
          • 比較由該標(biāo)簽的parameter屬性指定的參數(shù)值(request中)是否與該標(biāo)簽的value屬性值相等。

          logic:forward

          我覺得將forward和redirect這兩個動作放到一起對比著介紹更加有利于理解,基于此原因也就將logic:forward和logic:redirect這兩個標(biāo)簽也拿到這里一起介紹了。

          讓我們看看這兩個動作的區(qū)別:

          • forward是在servlet內(nèi)部執(zhí)行,瀏覽器完全不會感知到這個動作,原始的url也不會改變,瀏覽器重新裝載的話也只是對原始的請求進行簡單的重復(fù)。
          • redirect則分成兩個步驟:第一步是web應(yīng)用程序告訴瀏覽器第二個url,然后瀏覽器向第二個url發(fā)送請求。

           

          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)簽。

          posted on 2007-10-29 12:21 北極雪 閱讀(946) 評論(3)  編輯  收藏 所屬分類: Struts

          評論

          # re: struts-logic標(biāo)簽 2007-11-13 10:02 朱小天
          如何實現(xiàn)logic-interate的換行問題并且每行要輸出兩條信息
            回復(fù)  更多評論
            

          # re: struts-logic標(biāo)簽 2008-04-17 15:27 雨點
          實在太詳細了,正好在學(xué)struts,這個很實用  回復(fù)  更多評論
            

          # re: struts-logic標(biāo)簽 2008-04-17 15:44 雨點
          不過我怎么感覺和我學(xué)的不一樣  回復(fù)  更多評論
            


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 温泉县| 绥江县| 虎林市| 崇礼县| 永宁县| 乌兰浩特市| 安福县| 增城市| 黄冈市| 兰西县| 长海县| 玉龙| 乳源| 安义县| 黑河市| 克拉玛依市| 平凉市| 项城市| 宁城县| 长顺县| 伊川县| 贞丰县| 卓资县| 那坡县| 寿阳县| 临沂市| 桂平市| 专栏| 来安县| 东乌| 海安县| 长葛市| 荥阳市| 新密市| 宜春市| 平度市| 孙吴县| 庄浪县| 岳阳县| 安仁县| 阿城市|