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>

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450814.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450814.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450814.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何使用postman做接口測試

1、get請求傳參 只要是get請求都可以在瀏覽器中直接發&#xff1a; 在訪問地址后面拼 ?keyvalue&keyvalue 例如&#xff1a;在瀏覽器中直接輸入訪問地址&#xff0c;后面直接拼需要傳給服務器的參數http://api.nnzhp.cn/api/user/stu_info?stu_name小黑2、post請求&…

【狂神說】分析前后端分離開源項目?

文章目錄1.如何分析開源項目項目簡介項目源碼2.觀察開源項目3.開源項目下載4.跑起來是第一步5.前后端分離項目固定套路6.如何找到一個開源項目1.如何分析開源項目 學習的方式&#xff1a; 不知道這個代碼怎么來的這個代碼跑不起來這個項目對我們有什么幫助&#xff0c;不會模…

設計公共API的六個注意事項

摘要&#xff1a;俗話說&#xff1a;“好東西就要貢獻出來和大家一起分享”&#xff0c;尤其是在互聯網業務高度發達的今天&#xff0c;如果你的創業公司提供了一項很酷的技術或者服務&#xff0c;并且其他用戶也非常喜歡該產品&#xff0c;在這種情況下&#xff0c;最好的解決…

go 交叉編譯

golang中windows交叉編譯 env GOOSlinux GOARCHamd64 go build .打包鏡像 FROM alpineMAINTAINER "congge"ADD ./casino_niuniu /usr/local/casino_niuniu/bin/casino_niuniu ADD ./templates /usr/loca/lcasino_niuniu/bin/templates ADD ./public /usr/local/casin…

IntelliJ Idea 2017 免費激活方法

見&#xff1a;https://www.cnblogs.com/suiyueqiannian/p/6754091.html 1. 到網站 http://idea.lanyus.com/ 獲取注冊碼。 2.填入下面的license server: http://intellij.mandroid.cn/   http://idea.imsxm.com/   http://idea.iteblog.com/key.php 以上方法驗證均可以

P3193 [HNOI2008]GT考試

傳送門 容易看出是道DP 考慮一位一位填數字 設 f [ i ] [ j ] 表示填到第 i 位&#xff0c;在不吉利串上匹配到第 j 位時不出現不吉利數字的方案數 設 g [ i ] [ j ] 表示不吉利串匹配到第 i 位&#xff0c;再添加一個數字&#xff0c;使串匹配到第 j 位的方案數 那么方程顯然為…

LeetCode刷題攻略

目錄 一、LeetCode簡介 二、刷leetcode的主要目的 三、常用的數據結構 四、常用的算法思想 五、選擇算法題 1、刷題選擇 2、刷題方法 方法一&#xff1a;順序法 方法二&#xff1a;標簽法 方法三&#xff1a;隨機法 方法四&#xff1a;必殺法 六、刷題攻略 TIP 1&…

SQLserver數據庫反編譯生成Hibernate實體類和映射文件

一、建立項目和sqlserver數據庫 eclipse&#xff0c;我使用的版本是neon3 二、Data Source Explorer 選擇OK 在data source Explorer的Database Connections 選擇New 填寫好General的連接信息 新建New Driver Definition 填寫完選擇OK 選擇剛才的Drivers Test Connetion測試 N…

最受歡迎的5大Linux發行版

摘要&#xff1a;要統計有多少人在使用那款Linux發行版幾乎是不可能的事情&#xff0c;但我們可以使用一些在線分析工具來大概地看看哪些Linux發行版更受歡迎。 Google Trends的數據顯示&#xff0c;Ubuntu用戶正在流向Mint&#xff0c;但依然在各方面都比其它Linux發行版更有優…

C#動態操作DataTable(新增行、列、查詢行、列等)

public void CreateTable(){//創建表DataTable dt new DataTable();//1、添加列dt.Columns.Add("Name", typeof(string)); //數據類型為 文本//2、通過列架構添加列DataColumn age new DataColumn("Age", typeof(Int32)); //數據類型為 整形DataColumn…

使用IntelliJ IDEA 配置Maven(入門)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 下載Maven 官方地址&#xff1a;http://maven.apache.org/download.cgi 解壓并新建一個本地倉庫文件夾 2.配置本地倉庫路徑 3.配…

[算法]不使用*、/、+、-、%操作符求一個數的1/3

摘要&#xff1a;算法一直是程序員進階的一道龍門&#xff0c;通常算法都是為了更高效地解決問題而創造的&#xff0c;但也有的只是出于學術性&#xff0c;并不在意其實際意義。這是近日在國外技術問答網站stackoverflow的一個熱門問題&#xff0c;不知道你能給出幾種解決方法&…

2022屆互聯網秋招備戰

文章目錄1、何為秋招&#xff1f;1.1應屆生身份1.2秋招、春招、校招1.3、社招、海投2.秋招信息如何獲取&#xff1f;3、如何備戰秋招&#xff1f;3.1、簡歷&#xff08;ps做簡歷&#xff09;3.2、筆試準備3.3、面試準備4、日常實習和暑假實習&#xff1f;1、春招≠暑期實習2、什…

php 兩變量值互換 方法

//方法一&#xff1a;$a "abc";$b"def";$a $a^$b;$b $b^$a;$a $a^$b;//方法二&#xff1a;list($a, $b) array($b, $a);//方法三&#xff1a;$a $a . $b;$b strlen( $b );$b substr( $a,0,(strlen($a)- $b ));$a substr( $a, strlen($b));//方法四&…

MySQL5.7 group by新特性,報錯1055

項目中本來使用的是mysql5.6進行開發&#xff0c;切換到5.7之后&#xff0c;突然發現原來的一些sql運行都報錯&#xff0c;錯誤編碼1055&#xff0c;錯誤信息和sql_mode中的“only_full_group_by“關&#xff0c;到網上看了原因&#xff0c;說是mysql5.7中only_full_group_by這…

IDEA中多行注釋及取消注釋快捷鍵

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1、一次性添加多行注釋的快捷鍵 首先選中要注釋區域&#xff0c;然后 ctrl/ 這個是多行代碼分行注釋&#xff0c;每行一個注釋…

為什么程序員不擅長估算時間?

摘要&#xff1a;時間估算是困難的&#xff0c;每一個程序員都有一個現實的估計區間&#xff0c;低于這個區間的估計意味著&#xff08;構件&#xff0c;測試&#xff0c;檢查代碼的&#xff09;時間開銷被低估了&#xff0c;超過這個區間的估計意味著這個任務太大而很難預估。…

red hat enterprise linux 7關閉防火墻的方法

2019獨角獸企業重金招聘Python工程師標準>>> red hat enterprise linux 7發布后&#xff0c;發現防火墻也變了&#xff0c;如何關閉防火墻呢&#xff0c;下面是方法 1.查看firewall的狀態 [rootsztech7 ~]# systemctl status firewalld firewalld.service - firewal…

IOS —— 網絡那些事(上) - http協議

作為一名并不太合格的程序員&#xff0c;今天要分享學習的成果&#xff0c;竟然講的是網絡相關HTTP協議的事情。&#xff08;也算是復習了&#xff09; 乍看HTTP協議的內容著實是十分復雜的&#xff0c;涉及到十分多互聯網"底層"框架的東西。今天就先撇開這部分詳細內…

【最新版】Java速成路線(急于找工作!)

文章目錄計算機網絡分層結構TCP/UDPHTTP/HTTPS狀態碼Cookie 和 SessionURI和URL操作系統線程和進程數據結構和算法數據結構算法設計模式&#xff08;23種&#xff09;單例工廠代理適配器觀察者模板實操工具Git/SVNMaven/GradleLinux基本操作NginxELKpostmanJAVA基礎語言基礎JVM…