日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Struts2中<s:iterator>基本用法及示例

發布時間:2023/12/18 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts2中<s:iterator>基本用法及示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

Struts2中<s:iterator>基本用法及示例

Iterator用于遍歷集合(java.util.Collection)或枚舉值(java.util.Iterator)。

參數:

名稱 必需 默認 類型 描述
status 否 String 如果設置此參數,一個IteratorStatus的實例將會壓入每個遍歷的堆棧
value 否 Object/String 要遍歷的可枚舉的(iteratable)數據源,或者將放入新列表(List)的對象
id 否 Object/String 用來標識元素的id。在UI和表單中為HTML的id屬性

例子:

<%@ page contentType=”text/html; charset=UTF-8″ %>
<%@ page import=”java.util.List” %>
<%@ page import=”java.util.ArrayList” %>
<%@ taglib prefix=”s” uri=”/struts-tags” %>

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<%
List list = new ArrayList();
list.add(“Max”);
list.add(“Scott”);
list.add(“Jeffry”);
list.add(“Joe”);
list.add(“Kelvin”);
request.setAttribute(“names”, list);
%>
<html>
<head>
<title>Iterator</title>
</head>
<body>
<h3>Names: </h3>
<!–
1、此處的空property元素用于獲得當前iterator的值
2、status被設成stuts,在iterator的里面就可以通過#stuts取得IteratorStatus的對象。 IteratorStatus類包含當前序號信息,如是否第一個或最后一個,是否為奇數序號。這些信息在我們做格式化的時候,顯得非常有用。
–>
<ol>
<s:iterator value=”#request.names” status=”stuts”>
<s:if test=”#stuts.odd == true”>
<li>White <s:property /></li>
</s:if>
<s:else>
<li style=”background-color:gray”><s:property /></li>
</s:else>
</s:iterator>
</ol>
</body>
</html>


在struts2中,iterator標簽是很好用的,但也要注意一下.舉個例子,
如果要在每行中只顯示兩條記錄,這個經常用到的例子來的了,可以這樣用:
<table width=”800px” align=”center”>
<tr>
<s:iterator value=”songs” status=”st”>
<td>
<input type=”checkbox” name=”songIds” id=”<s:property value=’id’/>” value=”<s:property value=’id’/>”><label for=”<s:property value=’id’/>”>

<s:property value=”name”/>
</td>
<s:if test=”#st.modulus(2)==0″>
<s:if test=”#st.last”>
</tr></s:if>
<s:else>
</tr><tr></s:else>
</s:if>
</s:iterator>
</table>
這里無非就是要注意 <s:if test=”#st.modulus(2)==0″>
來判斷整除2是否為0,(也可以用<s:if test=”#st.getIndex()%2==0)
并且注意如下的使用 #st.last,判斷是否到了最后一條記錄,并且注意:
iterator標簽有如下方法:
boolean isEven() 當前迭代元素索引是否為偶數;
boolean isOdd() 當前迭代元素索引是否為奇數;
boolean isLast() 是否為最后一條元素;
boolean isFirst() 是否為第一條元素。
有以上元素,那么判斷何時加入tr就非常方便。

= =====另附參考文章:http://blog.csdn.net/chirui/archive/2009/02/26/3940762.aspx?=============

今天同事寫程序時恰好遇到這個Struts2+Hibernate開發時比較典型的問題:

(1)Hibernate使用SQLQuery查詢部分字段提高效率;

(2)Struts2使用迭代標簽s:iterate顯示嵌套的Map和List以及數組這樣比較復雜的分組一類問題中常棘手的數據結構

所以晚上寫下這個程序供大家參考。

一、服務端Action和DAO類:

view plaincopy to clipboardprint?

@SuppressWarnings("serial")
class SomeAction extends ActionSupport{

public String execute() throws Exception{
return SUCCESS;
}


public Map<String, List<String[]>> getResults(){
return new SomeDAO().getGroupedRecords();
}

}


class SomeDAO extends TBaseDAO{

public SomeDAO(){
super();
}

@SuppressWarnings("unchecked")
public Map<String, List<String[]>> getGroupedRecords(){
//在表中基于type和code字段分組
String sql = "select type, code, count(*) count from table_1 group by type, code";
//使用SQLQuery, 只取出必要的列:code、type和基于此code和type的分組的記錄數
SQLQuery query = HibernateSessionFactory.getSession().createSQLQuery(sql);
query.addScalar("type", new org.hibernate.type.StringType());
query.addScalar("code", new org.hibernate.type.StringType());
query.addScalar("count", new org.hibernate.type.StringType());
//查出記錄
List<Object[]> rs = query.list();

Map<String, List<String[]>> categorys = new HashMap<String, List<String[]>>(10);
for (Object[] objects : rs) {
String type= (String)objects[0];
List<String[]> list = categorys.get(type);
if (list == null){
list = new ArrayList<String[]>();
categorys.put(type, list);
}
list.add(new String[]{type, (String)objects[1], (String)objects[2]});
}
return categorys;
}
}

@SuppressWarnings("serial")
class SomeAction extends ActionSupport{

public String execute() throws Exception{
return SUCCESS;
}


public Map<String, List<String[]>> getResults(){
return new SomeDAO().getGroupedRecords();
}

}


class SomeDAO extends TBaseDAO{

public SomeDAO(){
super();
}

@SuppressWarnings("unchecked")
public Map<String, List<String[]>> getGroupedRecords(){
//在表中基于type和code字段分組
String sql = "select type, code, count(*) count from table_1 group by type, code";
//使用SQLQuery, 只取出必要的列:code、type和基于此code和type的分組的記錄數
SQLQuery query = HibernateSessionFactory.getSession().createSQLQuery(sql);
query.addScalar("type", new org.hibernate.type.StringType());
query.addScalar("code", new org.hibernate.type.StringType());
query.addScalar("count", new org.hibernate.type.StringType());
//查出記錄
List<Object[]> rs = query.list();

Map<String, List<String[]>> categorys = new HashMap<String, List<String[]>>(10);
for (Object[] objects : rs) {
String type= (String)objects[0];
List<String[]> list = categorys.get(type);
if (list == null){
list = new ArrayList<String[]>();
categorys.put(type, list);
}
list.add(new String[]{type, (String)objects[1], (String)objects[2]});
}
return categorys;
}
}

二、頁面端Output.jsp

< contentType="text/html; charset=GBK"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<% int count = 0; // 用于計算換行的變量 %>
<s:iterator value="results" >
<!-- 第一層迭代getResults()的頂層HashMap, 并為HashMap<String, List<String[]>>
中的每一個類型對應的列表List生成一個表格 -->
<s:label value="key" /> <!-- 顯示HashMap的key值-->
<table>
<% count = 0; %>
<!-- 通過value取HashMap的每一個List, 開始迭代List -->
<s:iterator value="value" status="status">
<!-- 每5條記錄一行顯示-->
<% if( count % 5 == 0) { %> <tr> <% } %>
<td>
<!-- 每一個單元格中打印號碼及基于類型和此號碼的查詢分組的記錄數量 -->
<s:property value="value[#status.index][1]" />
(<s:property value="value[#status.index][2]" />)
</td>
<% if( count % 5 == 0) { %> </tr> <% } %>
<% count ++; %>
</s:iterator>
</table>
</s:iterator>

?

?

?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Struts2中<s:iterator>基本用法及示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。