熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Struts標簽中的多層logic:iterator詳解

2013-11-23 20:38:28  來源: Java開源技術 

  logic:Iterator標簽(以下簡稱該標簽)是Struts裡非常常用的一個標簽其作用在於循環顯示給定容器對象中的值
  
  如此常用的標簽其源代碼當然需要拿出來研究一下以下列舉幾條研究成果
  
  該標簽內部使用Collection來表示給定的容器所有的給定容器對象(如ArrayListMap等)都會被其轉化成為CollectionCollection實際就是Map和List的父類
  
  該標簽自己維護循環索引不用程序員管理索引
  
  該標簽常見的幾個屬性如下namepropertyscopeid
  
  對應Struts給出的Api說明如下
  
  name:包括要遍歷Collection的Jsp頁面的bean的名字(如果property沒有被定義)或者是那些通過getter方法獲得屬性的Jsp中的Bean的名字這些getter方法返回的是Collection(如果property定義了)
  
  property:在name命名的Jsp bean中定義的屬性的名字通過getter方法返回一個Collection
  
  scope:指示到哪裡去尋找name為名字的bean如果沒有定義缺省為any scope
  
  id:如果Collection非空的話在每次遍歷時候Collection中每個元素的名字
  
  其中除了id每個元素均為Rt expr這兒的rt expr的意思就是Run Time Expression明確的說就是如果你對一個Attribute的<rtexprvalue>指定為true你就可以在這樣的屬性中使用<%=%>之類的東東這個配置文件在tld中
  
  只有id是必須要說明的
  
  關於Api說明的說明
  
  id只是一個臨時標識在下面的<bean:write裡面出現的name屬性要和id一致才能打印出<bean:write的property而此property就是在iterator中的屬性
  
  舉例說明
  
  以下代碼生成一個階梯狀表格
  
  系統 資源 操作
  
  soft
  res
  opt
  soft
  res
  opt
  soft
  res
  opt
  
  在此之前傳來一個requestgetAttribute(userPurview)所以有在第一個logic中的userPurview就是在這個request裡面尋找userPurview
  
  返回的是一個list
  

  <table width= border=>
  <tr><td>系統</td>
  <td>資源</td>
  <td>操作</td>
  </tr>
  <logic:iterate id=targetSys name=userPurview scope=request> //這個id可以隨便起名但是要注意下文使用的一致性
  <tr bgcolor=#cccccc><td height= class=unnamed>
  <bean:write name=targetSys property=cn/>    //此處name和上面id保持一致property就是第一個list裡面的元素
  </td>
  <td height= class=unnamed> </td>
  <td height= class=unnamed> </td>
  </tr>
  <logic:iterate id=targetRes name=targetSys property=purviewResList>
  <tr><td height= class=unnamed> </td><td height= class=unnamed>
  <bean:write name=targetRes property=cn/>
  </td>
  <td height= class=unnamed> </td>
  </tr>
  
  <logic:iterate id=targetOpr name=targetRes property=purviewOprList>
  <tr><td height= class=unnamed> </td><td height= class=unnamed> </td>
  <td height= class=redzi>
  <bean:write property=cn name=targetOpr/></td>
  </tr>
  </logic:iterate>
  
  </logic:iterate>
  
  </logic:iterate>
  </table>
  
  結論
  
  多級迭代和單層差不多唯一注意的就是id和<bean:write中的name的對應上級logic的id與下級logic的name對應並且取出來的要是個Collectionname和id不一定實際需要這個bean都是虛擬的
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28816.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.