1. 程式人生 > >struts2中s:iterator 標籤的使用詳解

struts2中s:iterator 標籤的使用詳解

簡單的demo:
s:iterator 標籤有3個屬性:
value:被迭代的集合
id   :指定集合裡面的元素的id
status 迭代元素的索引
1:jsp頁面定義元素寫法 陣列或list

<s:iterator value="{'1','2','3','4','5'}" >
<s:property value='number'/>A
</s:iterator>
列印結果為: 1A2A3A4A5A
2:索引的用法
如果指定了status,每次的迭代資料都有IteratorStatus的例項,它有以下幾個方法
int getCount()返回當前迭代了幾個元素
int getIndex()返回當前元素索引
boolean isEven()當然的索引是否偶數
boolean isFirst()當前是否第一個元素
boolean isLast()
boolean isOdd()當前元素索引是否奇數
<s:iterator value="{'a','b','c'}" status='st'>
<s:if test="#st.Even">
現在的索引是奇數為:<s:property value='#st.index'/>
</s:if>
當前元素值:<s:property value='char'/>
</s:iterator>
3:遍歷map
value可以直接定義為:
value="#{"1":"a","2":"b"}"
每個元素以都好隔開。元素之間的key和value 冒號隔開
value也可以是資料棧裡面的java.util.Map物件
遍歷寫法如下:
<s:iterator value="map" status="st">
key : <s:property value='key'/>
value:<s:property vlaue='value'/>
</s:iterator>
當然key 和value 都可以使java 的 Object
3:遍歷資料棧.簡單的List類,
List<Attr>
class Attr{String attrName;String getAttrName(){return "123";}}
<s:iterator value="label" >
<s:property value="#id.attrName" />
</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
<s:iterator value="%{attrN }"    status="status">
index    is : <s:property value='status.index'/>
attrName is : <s:property value='id'/> or <s:property value='%{id}'/>
attrName is : <s:property value='%{attrV[#status.index]}'/>
</s:iterator>

<s:bean >
<s:param value="5" />
<s:param value="10" />
<s:iterator>
counter:<s:property/>
</s:iterator>
</s:bean>

這個標籤主要的的作用就是迭代出集合。。
value屬性表示需要跌代顯示出來的值。
status屬性,又來儲存迭代時的一些狀態值。

注:
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這四個值。

二、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          屬性了

三、使用ognl輸出對應的值。
<s:textfield 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"這樣的方式,只是去掉了前面的#。

User物件屬性獲取
如User中有username和password欄位
獲取username屬性<s:property value="user.username" />
獲取password屬性<s:property value="user.password" />

若User中又包含定義了address物件,address物件中包含有addr屬性,則可以這樣訪問
獲取addr屬性<s:property value="user.address.addr" />

若User中還包含一個get()的普通方法,可以這樣呼叫
<s:property value="user.get()" />
以上是呼叫值棧中物件的普通方法,user為值棧中的物件

呼叫action中的靜態方法get(),普通方法不能直接呼叫
<s:property value="@[email protected]()" />
以上為呼叫非值棧中的靜態方法

呼叫JDK中類的靜態方法<s:property value="@[email protected](32.56)" />
上例也可寫成<s:property value="@@floor(32.56)" />,省略前面的類則預設使用java.lang.Math類,其他類不可省略

呼叫普通類中的靜態屬性<s:property value="@[email protected]" />
address中的city靜態屬性要用public宣告

呼叫普通類的構造方法,如構造方法為
public User(String username)
{
this.username=username;
}
呼叫方法為<s:property value="new com.netshuai.model.User('hello').username" />,則返回username值為hello

獲取List<s:property value="list" />
獲取List中的某一個元素<s:property value="list[0]" />
獲取List的大小<s:property value="list.size" />
獲取Set<s:property value="set" />
無法獲取Set中的某一個元素,因為Set沒有順序
獲取Map<s:property value="map" />
獲取Map中所有key的值<s:property value="map.keys" />
獲取Map中所有value的值<s:property value="map.values" />
獲取Map中的某一個元素<s:property value="map['k1']" />

獲取List所有物件<s:property value="listObject" />,需要重寫toString()方法才能正常顯示物件的值
利用投影獲取List中所有物件的username屬性<s:property value="listObject.{username}" />
利用投影獲取List中第一個物件的username屬性<s:property value="listObject.{username}[0]" />
利用選擇獲取List中年齡大於30的物件<s:property value="listObject.{?#this.age>30}" />
利用選擇獲取List中年齡大於30的物件的username<s:property value="listObject.{?#this.age>30}.{username}" />
利 用選擇獲取List中年齡大於30的第一個物件的username<s:property value="listObject.{?#this.age>30}.{username}[0]" />或<s:property value="listObject.{^#this.age>30}.{username}" />
利用選擇獲取List中年齡大於30的最後一個物件的username<s:property value="listObject.{$#this.age>30}.{username}" />

獲取parameters中的屬性<s:property value="#parameters.name" />
獲取request中的屬性<s:property value="#request.name" />
獲取session中的屬性<s:property value="#session.name" />
獲取application中的屬性<s:property value="#application.name" />
<s:property value="#attr.name" />按順序遍歷上面四個物件,然後返回首先找到的值

%{}可以取出存在值堆疊中的Action物件,直接呼叫它的方法,如%{getText('key')}可以取出國際化資訊

${}可以用在國際化資原始檔中和struts2配置檔案中

使用top獲取值棧中第二個物件<s:property value="[1].top.user"/>
使用top獲取值棧中第二個物件的屬性<s:property value="[1].user"/>

呼叫值棧中action的靜態方法get()<s:property value="@[email protected]()"/>,vs也可寫做vs1
呼叫值棧中第二個action的靜態方法get()<s:property value="@[email protected]()"/>

將一個物件放入值棧
ActionContext.getContext().getValueStack().push(user);

相關推薦

Struts2s:iterator標籤的使用

使用iterator遍歷一個值。一個可迭代的值可以是java.util.Collection,java.util.Iterator中的任何一個。 引數 Name Required Default Evaluated Type Description begin fals

struts2s:iterator 標籤的使用 及 OGNL用法

User物件屬性獲取 如User中有username和password欄位 獲取username屬性<s:property value="user.username" /> 獲取password屬性<s:property value="user.password" /> 若User中又

struts2s:iterator 標籤的使用

簡單的demo: s:iterator 標籤有3個屬性: value:被迭代的集合 id   :指定集合裡面的元素的id status 迭代元素的索引 1:jsp頁面定義元素寫法 陣列或list <s:iterator value="{'1','2','3','4

struts2siterator 標籤

struts2的s:iterator 可以遍歷 資料棧裡面的任何陣列,集合等等 以下幾個簡單的demo:s:iterator 標籤有3個屬性:     value:被迭代的集合     id   :指定集合裡面的元素的id     status 迭代元素的索引 1:jsp頁面定義元素寫法 陣列或list

struts2s:iterator標籤在jsp頁面獲取action陣列物件

在昨天的開發過程中,需要在jsp頁面獲取action中的陣列物件的值,技術水平有效,開始覺得無從下手,後來想寫入java程式片,抱著試試看的心態打出了<s:property value='action中的陣列名'/>  發現頁面顯示出了陣列中的每一個元素,想逐個

struts2result參數

-s 兩種 共享 不能 返回結果 模式 處理方法 jsp tac 1.result中name的參數: SUCCESS:Action正確的執行完成,返回相應的視圖,success是name屬性的默認值; NONE:表示Action正確的執行完成,但並不返回任何視圖; ERRO

struts2的constant配置

exclude factory per war 數值 contex custom 自己 空間 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Soft

struts2s:select標籤從前後臺的取值

1.第一種: <s:select list="{'aa','bb','cc'}"  headerKey="00" headerValue="0"></s:select> 2.第二種: <s:select list="#{1:'aa',2:'

Struts2 s:select 標籤相關使用

本沒有想總結這個標籤的,感覺也就那樣,但是確實這個標籤用的太多了,因此還是簡單總結一下 這裡列舉幾個常用的屬性吧: 1、name:用來作為Action中取值的屬性 2、id:可能要做某些取值操作 3、list:在後臺或者自定義的一個取值集合 4、listKey:標籤的ke

struts2的跳轉 ----“請求轉發”和“重定向”之間的區別

轉載自:http://blog.163.com/shadow_wolf/blog/static/183469097201452625628798/ Struts2的ResultType和Action處理鏈  Struts2的結果型別 在struts-default.xml

SSH框架struts2標籤s:iterator標籤下使用s:select標籤

下面放幾段程式碼 實體類中 @Entity //實體 @Table(name="zl_user") public class Personinfo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(na

Struts2<s-if>和<s-iterator>標籤的使用

A:<s:if>判斷字串的問題: 1、判斷單個字元:<s:if test="#session.user.username=='c'"> 這樣是從session中取出username的值,並且判斷其是否為c,但是這樣判斷是不正確的,這樣判斷的話,根本判斷不出來,要改成下面這樣: <

struts2配置文件的method={1}

詳解 request user 代碼段 res 執行方法 splay let method struts.xml中的配置: <!-- 配置用戶模塊的action --> <action name="user_*" class="userActio

Struts2標籤 %{ } %{# }

?<%@ taglib prefix="s" uri="/struts-tags" %> 一.Struts2的值棧l結構? 1.root--結構是List集合 2.context--結果是map集合 可通過jsp頁面<s:debug></s:debug&

Mybatis的mapper檔案trim標籤

0、背景 parameterType引數型別student是別名,裡面的欄位有id,name,age,sex被封裝成bean物件,跟資料庫中student表中欄位一一對應,以下案例只為一個SQL語句。(初入SSM坑,請多多指教) update student set name='

Struts2s標籤的用法

A: <s:a href=""></s:a>-----超連結,類似於html裡的 <s:action name=""></s:action>-----執行一個view裡面的一個action <s:actionerror/>-----

mavenscope標籤

scope的分類 compile(編譯範圍) 預設就是compile,什麼都不配置也就是意味著compile。compile表示被依賴專案需要參與當前專案的編譯,當然後續的測試, 執行週期也參與其中,是一個比較強的依賴。打包的時候通常需要包含進去。 test(測試範圍

struts2 標籤

要使用Struts2的標籤,只需要在JSP頁面新增如下一行定義即可:<%@ taglib prefix="s" uri="/struts-tags"%> Struts2的標籤共分為五大類: 一、邏輯控制標籤 用於進行邏輯控制輸出,主要分為以下幾類: 1、條

jsp頁面jstl標籤 包括< c:choose>

JSLT標籤庫,是日常開發經常使用的,也是眾多標籤中效能最好的。把常用的內容,放在這裡備份一份,隨用隨查。儘量做到不用查,就可以隨手就可以寫出來。這算是Java程式設計師的基本功吧,一定要紮實。JSTL全名為JavaServer Pages Standard Tag Library,目前最新的版本為1.1版。

Struts2的ognl標籤介紹(property標籤iterator標籤、if/elseif/else標籤、url標籤、url標籤、radio單選框、select下拉選擇框)

Struts2中的ognl標籤介紹(property標籤、iterator標籤、if/elseif/else標籤、url標籤、url標籤、radio單選框、select下拉選擇框) property標籤用於輸出指定值: <s:set name="name" value="'kk'" /> &l