前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

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>基本用法及示例相关推荐

  1. 掌握shell编程中数组的常见用法及示例

    From: http://www.embeddedlinux.org.cn/html/jishuzixun/201211/19-2386.html 给大家分享下数组的用法小例子,希望能给大家一点帮助. ...

  2. 轻松掌握shell编程中数组的常见用法及示例

    缘起:在老男孩进行linux培训shell编程教学中,发现不少水平不错的网友及同学对数组仍然很迷糊,下面就给大家分享下数组的用法小例子,希望能给大家一点帮助.其实SHELL的数组很简单,好用.我们学习 ...

  3. struts2中struts:iterator标签的使用

    参考: 1):struts2 标签的使用之二 s:iterator     http://blog.csdn.net/chinajust/article/details/3922760 2)Strut ...

  4. java it_Java中的Iterator的用法

    Iterator(迭代器) 迭代器是一种设计模式,它是一个对象,可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常器被称为"轻量级"对象,因为创建它的代价 ...

  5. Java中set.iterator()的用法;

    java.util.Set.iterator() 方法用于返回与集合相同元素的迭代器.元素从集合中的内容以随机顺序返回. 句法 iterate_value = Set.iterator(); 参数:该 ...

  6. Struts2中s标签的用法

    A: <s:a href=""></s:a>-----超链接,类似于html里的 <s:action name="">< ...

  7. Struts2中s:iterator/s:iterator标签的使用:

    问题是这样的: <s:iterator value="zhangjieList"> <s:property value="bb"/> & ...

  8. Java中使用ArrayList的10个示例–教程

    Java中的ArrayList是HashMap之后最常用的集合类. Java ArrayList表示一个可自动调整大小的数组,并用于代替数组. 由于创建数组后我们无法修改数组的大小,因此我们更喜欢在J ...

  9. WEB Struts2 中OGNL的用法

    2019独角兽企业重金招聘Python工程师标准>>> User对象属性获取 如User中有username和password字段 获取username属性<s:propert ...

最新文章

  1. sql server 2008建域时提示admin密码不符合要求解决方法
  2. 多个sphinx配置文件合并
  3. almost late for work
  4. python里面的之前打过的记忆信息-Python关键语句备忘录,拯救你的记忆
  5. deepl真的有取代一般翻译的能力,这吞吐量和稳定性...亲测有效
  6. vagrant box php开发环境配置--centos 7 安装 php7
  7. 和移动对接短信http协议和cmpp协议那个好_python网络爬虫之HTTP原理,爬虫的基本原理,Cookies和代理介绍...
  8. VirtualBox linux 网络设置 Bridged Adapter模式
  9. 现在很多单位有用计算机,为什么到了现在,还有很多的单位在用着xp系统?
  10. linux上ftp和lftp冲突,Linux FTP客户端 Lftp 使用方法,该如何解决
  11. 快速构建Windows 8风格应用34-构建Toast通知
  12. 基于socket编程的多人聊天室
  13. JAVA中的GUI---swing 和awt
  14. 如何使用迅雷下载电骡的资源
  15. hp服务器修改风扇转速,如何改变惠普笔记本风扇转速
  16. 【存储测试】vdbench存储性能测试工具
  17. JMokit中的@Mocked与@Injectable区别
  18. Elasticsearch安全加固
  19. 缺少msvc140.dll解决办法,缺少任意dll文件的解决办法
  20. [笔记]阿里云物联网之业务服务端(java、php)接入阿里云平台

热门文章

  1. idea中project sdk_一文秒懂IDEA中每天都在用的Project Structure知识
  2. ffmpeg录屏鼠标闪烁问题解决方法
  3. centos7安装telnet后/etc/xinetd.d/telnet下没有telnet
  4. String、StringBuffer和StringBuilde的区别
  5. 【FZU - 2039】Pets(二分图匹配,水题)
  6. 【51Nod - 1215 】数组的宽度 (单调栈 或 分治 或 单调队列,算贡献,需去重)
  7. 微软引入linux内核,微软内部已在讨论Linux内核中加入exFAT的可能性
  8. 嵌入式linux tftp rpm,嵌入式linux的tftp配置
  9. tortoisesvn创建部署项目_FrameWork如何进行云托管部署
  10. Seaborn——绘制统计图形