Logic標籤

在Struts應用中,Struts Logic標籤庫主要用於: 
1 根據特定的邏輯條件來判斷網頁內容 
2 判斷指定的內容是否存在 
3 循環遍歷集合元素 
4 進行字符串的匹配 
5 進行請求轉發和重定向
 


與比較運算相關的Logic標籤詳解 

<logic:equal> 
比較變量是否等於指定的常量 
<logic:notEqual> 
比較常量是否不等於指定的常量 
<Logic:lessThan> 
比較常量是否小於指定的常量 
<logic:lessEqual> 
比較常量是否小於或等於指定的常量 
<logic:geraterThan> 
比較常量是否大於指定的常量 
<logic:geraterEqual> 
比較常量是否大於或等於指定的常量 

與比較運算相關的Logic標籤的經常使用屬性: 
Value 指定一個用於供比較的常量值 
Cookie 指定一個cookie值與給定的常量值進行比較 
Header 指定一個header屬性值與給定的常量值進行比較 
Name 指定一個變量或JavaBean對象與給定的常量值進行比較 
Property 若是name屬性指定的是JavaBean對象,則由property屬性指定一個 屬性與給定的常量值進行比較 
Parameter 指定一個請求參數與給定的常量值進行比較 
Scope 指定name屬性指定對象的做用範圍 


與字符串匹配相關的Logic的標籤詳解: 
Struts Logic 標籤庫中與字符串匹配相關的標籤有: 
<logic:match> 
標籤判斷變量中是否包含指定的常量字符串 
<logic:notMatch> 
標籤判斷變量中是否不包含指定的常量字符串 

與字符串匹配相關的Logic標籤的屬性: 
Value 指定一個用於供比較的常量字符串 
Location 指定子字符串的匹配位置,有兩個可選值: 
Start:表示子串位於母串的起始處 
End:表示子串位於母串的結尾處 
Cookie 指定一個cookie值與給定的常量字符串進行比較 
Header 指定一個header值與給定的常量字符串進行比較 
Name 指定一個變量或JavaBean對象與給定的常量字符串進行比較 
Property 若是name屬性指定的是JavaBean對象,則由property屬性指定一個 屬性與給定的常量字符串進行比較 
Parameter  指定一個請求參數值與給定的常量字符串進行比較 
Scope 指定name屬性指定對象的做用範圍 


<logic:empty>與<logic:notEmpty> 
這對標籤主要用於判斷指定的變量是否爲null或空字符串 
<logic:empty> 
判斷指定變量是否爲null或空字符串 
<logic:notEmpty> 
判斷指定的變量是否不是null或非空字符串 

<logic:empty>與<logic:notEmpty> 
Name 指定一個變量或JavaBean對象判斷是否存在 
Property 若是name屬性指定的是JavaBean對象,則由property屬性指定一個 屬性判斷其屬性是否存在 
Scope 指定name屬性指定對象的做用範圍 


<logic:present>與<logic:notPresent> 
這對標籤主要用於判斷指定對象是否存在 
<logic:present> 判斷指定對象是否存在 
<logic:notPresent> 判斷指定對象是否不存在 

<logic:present>與<logic:notPresent>經常使用屬性: 
Value 判斷指定的cookie是否存在 
Name 判斷指定的變量後JavaBean對象是否存在 
Header 判斷指定的header是否存在 
Property 若是name屬性指定的是JavaBean對象,則判斷由property屬性指定 一個屬性是否存在 
Parameter 判斷指定的請求參數是否存在 
Scope 指定name屬性指定對象的做用範圍 
Role 判斷當前經過權限驗證的用戶是否具備指定的安全角色 
User 判斷當前經過權限驗證的用戶是否具備指定的用戶名 


<logic:messagePresent>與<logic:messageNotPresent> 
這對標籤主要用於判斷指定的消息對象或消息是否存在與request範圍內 
<logic:messagePresent> 
判斷指定消息是否存在 
<logic:messageNotPresent> 
判斷指定消息是否不存在 

<logic:messagePresent>與<logic:messageNotPresent>經常使用屬性: 
Name 指定在request範圍內檢索ActionMessage或ActionErrors對象的屬性 key 
Property 指定從ActionMessages或ActionErrors對象中檢索某條消息key 
Message 若是設置爲true,則name屬性指定的值無效,若是爲false,則根據 name的屬性指定的屬性key 


<logic:iterate>標籤 
<logic:iterate>可以在一個循環中遍歷數組、Collection、Enumeration、Iterator或Map中的全部元素 

<logic:iterate>經常使用屬性: 
Id 指定一個用於引用集合中當前元素的變量名 
Collection 指定一個用於獲得集合對象的運行時表達式 
Name 指定一個須要遍歷的集合對象 
Property 若是name屬性指定的是JavaBean對象,則有Property屬性指定其中 一個屬性做爲須要遍歷的集合對象 
Scope 指定name屬性指定對象的做用範圍 
Type 指定集合中每一個元素的類型 
indexId 指定一個用於存放當前元素序號的變量名 
Length 指定須要遍歷的元素數目,默認值爲集合的全部元素 
Offset 指定開始遍歷的起始位置,默認爲0 

<logic:forward>標籤 
用於請求轉發,它的name屬性與Struts配置文件的<global-forwards>的子元素<forward>元素匹配 

<logic:redirect>標籤 html

 

Logic 標籤庫 數組

        此標籤庫能夠分爲三種類型:條件、循環、轉發/重定向。

.) 條件類型 瀏覽器

1. logic:emptylogic:notEmpty
logic:empty
標籤判斷腳本變量是否爲null,是不是一個空的字符串(長度爲0),是不是一個空的collectionmap(調用isEmpty()方法來判斷)logic:notEmpty標籤相似。
安全

 <logic:empty name="myBean">
   The bean is missing
 </logic:empty>
 <logic:notEmpty name="myBean">
   The bean is not missing
 </logic:notEmpty>
cookie

2. 上段代碼表示當一個名爲myBeanbean在全部的scope中都不存在時,輸出The bean is missing;存在的話輸出The bean is not missing
此標籤有三個屬性:namepropertyscope 框架

3. logic:equal, logic:notEqual, logic:lessThan, logic:greaterThan,logic:lessEqual, and logic:greaterEqual
這堆logic:*equal*標籤從名字上就能知道意思,它們使用起來有些笨拙。

有以下屬性:namepropertyscopevaluecookieheaderparameter less

 <logic:equal name="bean" property="doubleProperty" value="<%= doub1 %>">
    equal
 </logic:equal>
 <logic:greaterEqual name="bean" property="doubleProperty" value="<%= doub1 %>">
    greaterEqual
 </logic:greaterEqual> 
jsp

4.   spa

5. logic:presentlogic:notPresent
檢查headerrequest parametercookieJavaBeanJavaBean propertie是否存在且不等於null。另外還能夠檢查當前用戶的身份,使用屬性userrole

其它的屬性有:namepropertyscopecookieheaderparameter orm

 <logic:notPresent name="myBean"  property="prop"  scope="page">
 The bean property bean.prop is present
 </logic:notPresent>

6. 上段代碼檢查在page做用域內名爲myBeanbean是否有一個prop屬性。

7. logic:matchlogic:notMatch
比較兩字符串是否相等,能夠比較字符串的開始的、結尾的或其中的某個部分。

location
屬性:指定從某個位置開始進行比較。
其它的屬性有:namepropertyscopevaluecookieheaderparameter
下面的例子是檢查瀏覽器類型:

 <logic:match header="User-Agent" value="Mozilla">
  Mozilla!
 </logic:match>
 <logic:notMatch header="User-Agent" value="Mozilla">
  Not Mozilla :(
 </logic:notMatch>

8. 
檢查bean屬性是否匹配"hello world"字符串:

 <logic:match name="bean" property="stringProperty" value="hello world">
  Hello World!
 </logic:match>
 <logic:notMatch name="bean" property="stringProperty" value="hello world">
  I'm so sad and lonely.
 </logic:notMatch> 

9. 
檢查名爲"name"的請求參數是不是"xyz"的子字符串,可是子字符串必須從"xyz"的索引位置1開始(也就是說子字符串必須是"y""yz")

 <logic:match parameter="name"  value="xyz"  location="1">
      The parameter name is a sub-string of the string xyz from index 1
 </logic:match>

.) 循環類型

logic:iterate
重複嵌套在此標籤體內的指定集合的元素,集合必須爲以下類型:array Collection(包括ArrayListVector)、EnumerationIteratorMap(包括HashMapHashtableTreeMap)。例如:

 <logic:iterate id="employee" name="department" property="employees" scope= "request">

 <bean:write name="employee" property="username" />

 <bean:write name="employee" property="name" />

 <bean:write name="employee" property="phone" />

 </logic:iterate> 

上面的代碼迭代了一個employee的集合,是department屬性employees的一個集合,做用域爲request

爲了輸出第五個到第十個employee,須要使用lengthoffset屬性:

 <logic:iterate id="employee" name="department" property="employees" scope= "request" length="10" offset="5">

 <bean:write name="employee" property="username" />

 <bean:write name="employee" property="name" />

 <bean:write name="employee" property="phone" />

 </logic:iterate>


 
你能夠定義一個變量保存當前的索引值:      

 <ol>
 <logic:iterate id="element" name="bean" property="stringArray"
indexId
="index">
 <li>
 <em>
 <bean:write name="element"/>
 </em>&nbsp;
 [<bean:write name="index"/>]</li>
 </logic:iterate>
 </ol> 

.) 轉發/重定向類型

logic:forwardlogic:redirect
logic:forward
標籤和jsp:forward標籤和類似,但它可使用global forward中的一個ActionForward 

 <logic:forward name="login" />
---------------------------------------------------------------------------------------------------------------
 
與上面相關的global forward中的代碼:

 <global-forwards>
 <forward name="login" path="/loginForm.jsp"/>
 </global-forwards>


logic:redirect
標籤和上面的標籤相似,但它默認調用的方法是response.sendRedirect(),取代了上面的requestDispatcher.forward()。最大的不一樣是它支持全部html:link標籤的屬性,因此你可以指定request參數:

 <logic:redirect name="login" paramId="employeeId" paramName="employee" property="id" />


提示:1.) MVC框架下,不推薦使用這兩個標籤,你應該是從controller中選擇下一個view,而不是從view中選擇。
           2.) 
Jsp頁面中不要過多的使用logic標籤。

 

 

 

 

1.<logic:equal> and so on比較標籤
 
如下eg都是由一個servlet轉發過來的
  MyBean mb = new MyBean();
  mb.setName("yc");
  mb.setCount(200);
  request.setAttribute("mybean",mb);
  request.getRequestDispatcher("jsp1.jsp").forward(request,response);

 eg1<bean:define id="myint" value="100"/> //當前頁面定義一個字符串
            <logic:equal name="myint" value="100">
            myint=100
           </logic:equal>

 eg2<bean:define id="bean3" name="mybean" scope="request"/> //request上獲取bean
           <logic:lessThan  name="bean3" property="count" value="200.a"> //
比較beancount屬性和
200.a
           bean3 LessThan 200.a
          </logic:lessThan>

 注意:若是兩個字符串都可以成功轉爲數字,則是比較數字的大小,不然像eg2就是比較字符串的大小

 eg3<bean:define id="bean1" name="mybean" property="name" scope="request"/>
            <logic:equal name="bean1" value="yc">
            name1=yc
           </logic:equal>

 eg4<bean:define id="bean2" name="mybean" scope="request"/>
           <logic:equal name="bean2" property="name" value="yc">
           name2=yc
          </logic:equal>
 
 
注意:eg3eg4都是比較bean屬性,只是寫法不一樣

 eg5:比較請求參數

      <logic:equal parameter="id" value="150">
      <bean:parameter id="myid" name="id"/>
       parameter:<bean:write name="myid"/>=150
      </logic:equal>

2.<logic:match>
 
查看指定字符串是否被包含

 <logic:match name=""    value="
被包含字符串"    location="start/end也能夠不寫,就是任意位置"/>

 eg<bean:define id="bean4" name="mybean" property="name" scope="request"/>
         <logic:match  name="bean4" value="y" location="start">
          yc is start with bean4
         </logic:match>

3.< logic:iterator>
 a.
遍歷Vector等集合,value形式的

 <logic:iterator    id="
每一個集合的元素"    name="集合在當前頁面的綁定名"    indexId="序號"    
             offset="
起始位置,0開始"    length="遍歷長度
"/>
 
      
前提:
  Vector v = new Vector();
                    v.add("dog");
                    v.add("girl");
                    v.add("bird");
                    v.add("cat");
                    request.setAttribute("myvector",v);
                    request.getRequestDispatcher("jsp1.jsp").forward(request,response); 


 eg1
<bean:define id="vector1" name="myvector" scope="request"/>
            <logic:iterate id="element" name="vector1">
            <bean:write name="element"/>
            <br />
            </logic:iterate>

 eg2<bean:define id="vector2" name="myvector" scope="request"/>
            <logic:iterate id="element" name="vector2" indexId="index" offset="1" length="3">
            <bean:write name="index"/>.<bean:write name="element"/><br />
            </logic:iterate>

 b.遍歷Map等,key/value形式
    
只是輸出的時候有所不一樣
   <bean:write   name=""    property="key"/>
輸出元素的key部分
   <bean:write   name=""    property="value"/>
輸出元素的value部分

 前提:  HashMap hm = new HashMap();
  hm.put("yc","yuechen");
  hm.put("tjs","tianjinsong");
  hm.put("xc","xiaocen");
  hm.put("xk","xukai");
  request.setAttribute("mymap",hm);

 eg<bean:define id="map1" name="mymap" scope="request"/>
         <logic:iterate id="element" name="map1" indexId="index">
         <bean:write name="index"/>.<bean:write name="element" property="key"/>:<bean:write name="element"   property="value"/><br />
        </logic:iterate>
  
  c.
遍歷map中的集合

  
雙層iterator,內層iterator須要加入property="value"


  
前提:  HashMap hm2 = new HashMap();
               String[]asia = {"china","japan","korea"};
               hm2.put("asia",asia);
               String[]erop = {"greman","rasa","england"};
               hm2.put("erop",erop);
               String[]us = {"usa","canada"};
               hm2.put("us",us);
               request.setAttribute("country",hm2);

  eg<bean:define id="myc" name="country" scope="request"/>           <logic:iterate id="element" name="country" indexId="index">           <bean:write name="index"/>.<bean:write name="element" property="key"/><br />           <logic:iterate id="inelement" name="element" indexId="inindex" property="value">           -----<bean:write name="inindex"/>.<bean:write name="inelement"/><br />           </logic:iterate>          </logic:iterate> 

相關文章
相關標籤/搜索