struts2 一些遍歷取值標籤[轉]

struts2 的web 項目中爲了方便的編寫jsp,標籤是最好的選擇~~
~~struts2 標籤庫的定義在**-core-版本號.jar META-INF 路徑下找到struts-tags.tld文件;使用該標籤須要在web 項目裏面導入標籤庫:
    A:在web.xml文件 (默認 能夠省略)

   1. <taglib>
   2.     <taglib-uri>/struts-tags</taglib-uri>
   3.     <taglib-location>/WEB-INF/lib/*.jar</taglib-location>
   4. <taglib>

    B:在jsp 導入標籤的定義

   1. <%@ taglib prefix="s" uri="/struts-tags"%>

注意uri,上面定義的是默認寫法

~~ struts2 利用了內建的ognl表達式,它基於XWork,增長了對ValueStack的支持
,在jsp裏面經過ognl訪問屬性,struts2會自動搜尋棧內的全部實體。直到找到位置。
如:#person.address.ip 等於 person.getAddress().getIp();翻譯結果爲條用get方法
或是jstl的${person.address.ip}

~~<s:if>用法
A:直接寫表達式

   1. <s:set name='china' value='china'>
   2. <s:if test="${china=='china'}">show</s:if>
   3. result: show
   4. <s:set name="count" value="99">
   5. <s:if test="${count>0}">bigger than 0</s:if>
   6. <s:else>not</s:else>
   7. result: bigger than 0

B:在遍歷裏面使用判斷:

   1. <s:iterator id="id" value="label">
   2.     <s:if test="%{#id.attrValueId!=0}">
   3.         <s:property value="#id.attrValue" />
   4.                 <s:property value="#id.countAll" />                 <s:property value="#id.countRequest" />
   5.     </s:if>
   6.     <s:else>
   7.         <s:property value="#id.attrValue" />
   8.     </s:else>
   9. </s:iterator>

label是一個List<Attribu> Attribu 包含屬性attrValueId和countAll
在s:iterator域內這是id的值是"id",使用ognl讀取遍歷對象的方法是 #id
test="%{#id.attrValueId!=0}" 看子對象的屬性attrValueId是否爲0
<s:property value="#id.attrValue" /> 打印子對象的attrValue屬性

C:直接讀取對象

   1. <s:if test="request.price==null||request.price<=0">
   2. </s:if>

讀取對象request,判斷price是否小於0;
request 能夠是如何的javaBean,也能夠是基本屬性

D:直接讀取對象的另外一種寫法

   1. <s:if test="%{aTransactionSummaryBean!=null}">

E:多個條件的判斷

   1. <s:if test='%{isShowAll=="Y"||isShowAll==null||isShowAll==""}'>
   2.     <li class="selected">
   3. </s:if>
   4. <s:else>
   5.     <li>else
   6. </s:else>

isShowAll 爲Action 裏面的字符串屬性

F:直接拿Action裏面的boolean 貌似不xing
Action裏面

   1. private boolean choosed = true;
   2. public boolean isChoosed(){
   3.     return choosed;
   4. }
   5. <s:if test="choosed"></s:if>

發現這個判斷沒法正確運行,也許是ognl 是經過get方法來獲取對象的,若是在action 裏面有下面的方法;

   1. public String getChoosed(){
   2.     return "true";
   3. }

上面那個s:if能夠正確執行
注意:ognl和jstl標籤不能互相嵌套

~~~~<s:iterator >能夠遍歷 數據棧裏面的任何數組,集合等等 ~~
在使用這個標籤的時候有三個屬性值得咱們關注

1. value屬性:可選的屬性,value屬性是指一個被迭代的集合,使用ognl表達式指定,若是爲空的話默認就是ValueStack棧頂的集合.
2.id屬性:可選屬性, 是指集合元素的id
3.status屬性:可選屬性,該屬性在迭代時會產生一個IteratorStatus對象,該對象能夠判斷當前元素的位置,包含了如下屬性方法:

int getCount(); 迭代元素個數

int getIndex(); 迭代元素當前索引

boolean getFirst(); 是否爲第一個

boolean getEven(); 是否爲偶

boolean getLast(); 是否最後一個

bolean getOdd();   是否爲奇

因爲iteratorstatus對象並非ognl的根對象所以訪問須要加上 #訪問以下例子:

<s:iterator value=」{’dd’,'bb’,'cc’}」 status=」st」>

   <s:if test=」#st.odd」>

      <s:property value=」#st.index」/>

   </s:if>

</s:iterator>



此外:iterator也能夠迭代map對象,map對象中有幾對key-value 就迭代幾回,分別使用
<s:property value=」key」/>
<s:property value=」value」/>


A: 1.若是須要引用valueStack中的值,須要使用這樣的形式。

<s:iterator value="#userList" /> //userList在action部分被保存在Request中,因此使用#加屬性名來引用值。

2.若是集合的值是經過action的方法,假設咱們的action中有一個getListMenu方法,返回一個List集合。

咱們可使用以下的形式來引用這個集合,並用s:iterator來輸出。

<s:iterator value="listMenu" />

3.iterator的value使用定義好的方式,如:

<s:iterator value="{1,2,3,4}" />         //這樣跌代輸出的值就是1.2.3.4這四個值。

B:iterator中輸出具體值,若是,在上面咱們的list中的對象,有兩個屬性,都是String類型,一個是name,一個是url。

咱們能夠這樣來引用。

1.      <s:property value="name" />       //這樣咱們將能夠輸出跌代對象的name屬性值。

2.      若是咱們但願使用<s:url />來將跳轉事後的url進行處理,該如何來作?

          <s:url value="%{url}"/>            //%{}ognl的表達式,這樣的值可以將url的值進行<s:url/>的處理

         實際上就是轉爲絕對路徑。這樣,咱們就能夠對付一些因跳轉換產生的路徑問題。

    緣由:由於<s:iteratotr />之後,當前的對象應該就在ValueStack頂部了,這樣固然的url實際上就是對象的url          屬性了

C:使用ognl輸出對應的值。

<s:textfield name="loginName" value="%{#request.loginNames}"/>

使用此表達式,會生成一個文本框,而且,若是request.attribute中有loginNames屬性,將會作爲些文本框的默認值。

若是隻使用#request.loginNames在struts2的標籤內部,是不會顯示任何值的,注意外面加上的%{}附號,纔會被正常的使用。

若是但願如EL語言同樣直接輸出文件,如在一個<a></a>之間的innerHTML文本爲#request.loginNames的值,咱們只要使用:<s:property value="#request.loginNames" />使能夠正常使用!

注:

1.${}是EL語言的 %{}這樣的形式是ognl表過式語言的,在struts2的標籤內部,使用%{}這樣的形式,在標籤外部可使用${}EL語言的方式。若是在struts2的標籤內部使用${}這樣的方式,會出現如下的錯誤提示:

According to TLD or attribute directive in tag file, attribute value does not accept any expressions

2. 不少時候,咱們使用struts2的一些標籤,屬性是須要接受集合的,若是集合是保存在 request,session,或者是值棧(非根對象的棧頂),可使用#變量名的方式,若是獲取的值是在Action中經過特定的方法來獲取,就須要使用如 value="userList"這樣的方式,只是去掉了前面的#。
~~~如下幾個簡單的demo:
s:iterator 標籤有3個屬性:
    value:被迭代的集合
    id   :指定集合裏面的元素的id
    status 迭代元素的索引

1:jsp頁面定義元素寫法 數組或list

   1. <s:iterator value="{'1','2','3','4','5'}" id='number'>
   2.     <s:property value='number'/>A
   3. </s:iterator>

打印結果爲: 1A2A3A4A5A

2:索引的用法
若是指定了status,每次的迭代數據都有IteratorStatus的實例,它有如下幾個方法
int getCount()返回當前迭代了幾個元素
int getIndex()返回當前元素索引
boolean isEven()固然的索引是否偶數
boolean isFirst()當前是否第一個元素
boolean isLast()
boolean isOdd()當前元素索引是否奇數

   1. <s:iterator value="{'a','b','c'}" id='char' status='st'>
   2.     <s:if test="#st.Even">
   3.         如今的索引是奇數爲:<s:property value='#st.index'/>
   4.     </s:if>
   5.     當前元素值:<s:property value='char'/>
   6. </s:iterator>

3:遍歷map
value能夠直接定義爲:

   1. value="#{"1":"a","2":"b"}"

每一個元素以都好隔開。元素之間的key和value 冒號隔開
value也能夠是數據棧裏面的java.util.Map對象
遍歷寫法以下:

   1. <s:iterator value="map" id="id" status="st">
   2.      key : <s:property value='key'/>
   3.      value:<s:property vlaue='value'/>
   4. </s:iterator>

固然key 和value 均可以使java 的 Object

3:遍歷數據棧.簡單的List類,
List<Attr>
class Attr{String attrName;String getAttrName(){return "123";}}

   1. <s:iterator value="label" id="id">
   2.     <s:property value="#id.attrName" />
   3. </s:iterator>

固然value 還能夠寫成 value="%{label}" label能夠有.操做
label的屬性List 能夠寫成value="%{label.list}" 至關於:getLabel().getList();

4:遍歷2個list;
List<AttrName> attrN {color,size,style}
List<AttrValue> attrV {red,20,gay}
這2個list的元素是一一對應的,一個attrN對應一個attrV

   1. <s:iterator value="%{attrN }" id="id"   status="status">
   2. index    is : <s:property value='status.index'/>
   3. attrName is : <s:property value='id'/> or <s:property value='%{id}'/>
   4. attrName is : <s:property value='%{attrV[#status.index]}'/>
   5. </s:iterator>
java

相關文章
相關標籤/搜索