帮别人做违法网站,商会 网站模板,怎么做市场推广,wordpress网址导航页面前些天发现了一个巨牛的人工智能学习网站#xff0c;通俗易懂#xff0c;风趣幽默#xff0c;忍不住分享一下给大家。点击跳转到教程。 Struts2中s:iterator基本用法及示例 Iterator用于遍历集合#xff08;java.util.Collection#xff09;或枚举值#xff08;j…前些天发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家。点击跳转到教程。 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; charsetUTF-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 titleIterator/title /head body h3Names: /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” liWhite 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 /trtr/s:else /s:if /s:iterator /table 这里无非就是要注意 s:if test”#st.modulus(2)0″ 来判断整除2是否为0,(也可以用s:if test”#st.getIndex()%20) 并且注意如下的使用 #st.last,判断是否到了最后一条记录,并且注意: iterator标签有如下方法 boolean isEven() 当前迭代元素索引是否为偶数 boolean isOdd() 当前迭代元素索引是否为奇数 boolean isLast() 是否为最后一条元素 boolean isFirst() 是否为第一条元素。 有以上元素那么判断何时加入tr就非常方便。 另附参考文章http://blog.csdn.net/chirui/archive/2009/02/26/3940762.aspx 今天同事写程序时恰好遇到这个Struts2Hibernate开发时比较典型的问题 1Hibernate使用SQLQuery查询部分字段提高效率 2Struts2使用迭代标签s:iterate显示嵌套的Map和List以及数组这样比较复杂的分组一类问题中常棘手的数据结构 所以晚上写下这个程序供大家参考。 一、服务端Action和DAO类 view plaincopy to clipboardprint? SuppressWarnings(serial) class SomeAction extends ActionSupport{ public String execute() throws Exception{ return SUCCESS; } public MapString, ListString[] getResults(){ return new SomeDAO().getGroupedRecords(); } } class SomeDAO extends TBaseDAO{ public SomeDAO(){ super(); } SuppressWarnings(unchecked) public MapString, ListString[] 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()); //查出记录 ListObject[] rs query.list(); MapString, ListString[] categorys new HashMapString, ListString[](10); for (Object[] objects : rs) { String type (String)objects[0]; ListString[] list categorys.get(type); if (list null){ list new ArrayListString[](); 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 MapString, ListString[] getResults(){ return new SomeDAO().getGroupedRecords(); } } class SomeDAO extends TBaseDAO{ public SomeDAO(){ super(); } SuppressWarnings(unchecked) public MapString, ListString[] 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()); //查出记录 ListObject[] rs query.list(); MapString, ListString[] categorys new HashMapString, ListString[](10); for (Object[] objects : rs) { String type (String)objects[0]; ListString[] list categorys.get(type); if (list null){ list new ArrayListString[](); categorys.put(type, list); } list.add(new String[]{type, (String)objects[1], (String)objects[2]}); } return categorys; } } 二、页面端Output.jsp contentTypetext/html; charsetGBK% % taglib prefixs uri/struts-tags% % int count 0; // 用于计算换行的变量 % s:iterator valueresults !-- 第一层迭代getResults()的顶层HashMap, 并为HashMapString, ListString[] 中的每一个类型对应的列表List生成一个表格 -- s:label valuekey / !-- 显示HashMap的key值-- table % count 0; % !-- 通过value取HashMap的每一个List, 开始迭代List -- s:iterator valuevalue statusstatus !-- 每5条记录一行显示-- % if( count % 5 0) { % tr % } % td !-- 每一个单元格中打印号码及基于类型和此号码的查询分组的记录数量 -- s:property valuevalue[#status.index][1] / (s:property valuevalue[#status.index][2] /) /td % if( count % 5 0) { % /tr % } % % count ; % /s:iterator /table /s:iterator