Struts2 两层list遍历<s:iterator>

原创 2015年11月17日 18:41:34

这个功能实现了:将两级目录从数据库读取并显示在浏览器上,遍历显示时用到了<s:iterator>标签遍历两层List


1.首先是数据库要用到的两张表

一级目录表(代码注释中的大类目)t_categoryone:



二级目录表(代码注释中的小类目)t_categorytwo:



2.对应的model层  两个:CategoryOne和CategoryTwo


CategoryOne {
  private int CategoryOne_id; 
  private String CategoryOne_name;


public int getCategoryOne_id() {
return CategoryOne_id;
}
public void setCategoryOne_id(int categoryOne_id) {
CategoryOne_id = categoryOne_id;
}
public String getCategoryOne_name() {
return CategoryOne_name;
}
public void setCategoryOne_name(String categoryOne_name) {
CategoryOne_name = categoryOne_name;
}
}

public class CategoryTwo {
   private int categoryTwo_id; 
   private String categoryTwo_name;
   private int categoryOne_id;
   
   public int getCategoryTwo_id() {
return categoryTwo_id;
}
public void setCategoryTwo_id(int categoryTwo_id) {
this.categoryTwo_id = categoryTwo_id;
}
public String getCategoryTwo_name() {
return categoryTwo_name;
}
public void setCategoryTwo_name(String categoryTwo_name) {
this.categoryTwo_name = categoryTwo_name;
}
public int getCategoryOne_id() {
return categoryOne_id;
}
public void setCategoryOne_id(int categoryOne_id) {
this.categoryOne_id = categoryOne_id;
}
}


3.Dao  层操纵数据库,代码如下:

BaseDAO为:

public class BaseDAO {
    protected Connection conn = null;
    protected ResultSet rs = null;
    protected PreparedStatement pstmt = null;
    protected int result;
    
   
    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
     
    }
 
    public void getConn() {
        String url = "jdbc:mysql://localhost:3306/schoolo2o";
        String user = "root";
        String password = "wmywmy";
        try {
            conn = DriverManager.getConnection(url, user, password);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("数据库已连接");
 
    }
 
    public void closeAll() {
        try {
            if (pstmt != null && !pstmt.isClosed())
                pstmt.close();
            if (rs != null && !rs.isClosed())
                rs.close();
            if (conn != null & conn.isClosed())
                conn.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("数据库已关闭");
    }
 
    public void doQuery(String sql, Object... params) {
        try {
            pstmt = conn.prepareStatement(sql);
            if (params != null) {
                for (int i = 0; i < params.length; i++) {
                    pstmt.setObject(i + 1, params[i]);
                }
                rs = pstmt.executeQuery();
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
 
    public void doOperate(String sql, Object... params) {
        try {
            pstmt = conn.prepareStatement(sql);
            if (params != null) {
                for (int i = 0; i < params.length; i++) {
                    pstmt.setObject(i + 1, params[i]);
                }
                result = pstmt.executeUpdate();
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public int getNum(String sql){
        int num = 0;
        try{
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            while(rs.next()){
                ++num;
            }
        }catch (Exception e) {
            // TODO: handle exception
        }
        return num;
    }
}

CategoryDAO继承BaseDAO,代码如下:

两表连接查询出需要用到的数据,将它们分拨额添加到列表 list 中作为一组,再将这一组数据整体作为一个对象添加到listc3中

这样 列表即为 List <List>  两层列表


public class CategoryDAO extends BaseDAO{
  public ArrayList listCategory(){
    //大小类目合并查看
    ArrayList listc3 = new ArrayList();
    getConn();
    String sql = "select categoryTwo_id,categoryTwo_name,categoryOne_name from t_categoryone inner join t_categorytwo on t_categoryone.categoryOne_id = t_categorytwo.categoryOne_id where 1 = ?";
    doQuery(sql, 1);
         try {
  while(rs.next())
  {
  CategoryTwo c2 = new CategoryTwo();
  ArrayList list = new ArrayList();
  int CategoryTwo_id = rs.getInt("categoryTwo_id");
  String CategoryTwo_name = rs.getString("categoryTwo_name");
  String CategoryOne_name = rs.getString("categoryOne_name");
  list.add(CategoryTwo_id);
  list.add(CategoryTwo_name);
  list.add(CategoryOne_name);
  listc3.add(list);
 
  }
  closeAll();
  return listc3;
  } catch (SQLException e) {
  e.printStackTrace();
  return null;
  }
    }
}

4.Action   我的这个Action名字为AdminGoodsManageAction 放在包struts.schoolo2o.action.admin 里

public class AdminGoodsManageAction extends ActionSupport{

	private ArrayList listc3;//小类目加大类目名称 列表
        public ArrayList getListc3() {
		return listc3;
	}
	public void setListc3(ArrayList listc3) {
		this.listc3 = listc3;
	}
       public String listCategory(){
		//查看类目
		
		CategoryDAO categorydao = new CategoryDAO();
		listc3 = categorydao.listCategory();
		
		return SUCCESS;
	}

}

5.sruts.xml 的配置


<constant name="struts.devMode" value="true" />
 
  <package name="admin" namespace="/admin" extends="struts-default">
<!-- 查看小类目 -->
   <action name = "Admin_listCategory" class="struts.schoolo2o.action.admin.AdminGoodsManageAction" method="listCategory">
       <result>/admin/Admin_ManageCategoryTwo.jsp</result>
     </action>
 
  </package>


6.最后view层 Admin_ManageCategoryTwo.jsp ,可以忽略我前端样式的class 选择器

两层list遍历,第一层的status属性不能少。才能在第二层遍历里用到#status.index得到当前行的序号

<table class="table table-bordered table-striped" >
              <thead>
                <tr >
                  <th align="center">二级类目id</th>
                  <th align="center">二级类目名</th>
                  <th align="center">所属一级类目</th>
                  <th align="center">操作</th>
                </tr>
              
              </thead>
              <tbody>
               <s:iterator value="#request.listc3"  status="st">
                <tr >
                <s:iterator value="#request.listc3.get(#st.index)" >
                  <td align="center"><s:property /></td>
                  
                  
         </s:iterator>   
         <td>
                   <div class="modification">
                   <form action="" name = "auditform" id = "auditform" method = "post">
                     <input type = "button" class="btn btn-primary modify " value = "修改"  />
                     <input type = "button" class="btn btn-primary delete"  value = "删除" />
                   </form>
                    </div>
                   
                   <div class="clear"></div>
                  </td>         
        </tr>
          
        </s:iterator>
              </tbody>
            </table> 

访问http://localhost:8080/schoolo2o(我的项目名称)/admin/Admin_listCategory.action 即可得结果:




相关文章推荐

Struts 2 <s:iterator>标签嵌套以及遍历双层List

用Struts 2的iterator标签来遍历一个含有双层List的嵌套。 首先我们从最基础的说起,用iterator标签遍历一个List。 如果Action中有一个这样的不为null的属...

C++ STL学习 List iterator

环境: windows 7 x64, VC 6.0 STL List 中的 iterator存的是什么? 取元素使用 * 运算,比如 *iterSTList ,那么 iterSTList 是指针吗,...

s:iterator遍历两个list——平行,非嵌套

转载自:http://scorpiomiracle.iteye.com/blog/583489 需求:  如下表格所示,title 1,3是 action 中 list 中一个 object1 的...

s:iterator 标签属性

 iterator标签主要是用于迭代输出集合元素,如list set map 数组等,在使用标签的时候有三个属性值得我们关注 1. value属性:可选的属性,value属性是指一个被迭代的集...
  • aj251
  • aj251
  • 2014年11月25日 17:35
  • 940

Struts遍历标签<s:iterator>总结 .

struts2的s:iterator 可以遍历 数据栈里面的任何数组,集合等等 以下几个简单的demo: s:iterator 标签有3个属性:     value:被迭代的集合     id ...
  • lufeng66
  • lufeng66
  • 2012年03月09日 19:42
  • 20557

Struts迭代器(iterator)遍历List常用的4种例子

1. 遍历List 2. 遍历List> 3. 遍历UserEntity 4. 遍历List 例子的详细代码请参考附件1,给出两个4个例子的运行截图(如下图1):             ...

[Struts2]<s:iterator>各种遍历用法

struts s:iterator

struts2 标签<s:iterator />获取长度问题

class="spritTr"> " > 这边主要是想一开始就获得entityList的长度,于是用  就解决了 ~ 一些属性: 中的status 使用方法 1:#s...
  • wwbmyos
  • wwbmyos
  • 2012年05月30日 10:29
  • 13308

如何利用struts标签<s:iterator>遍历双层List

我想struts标签大家应该都不陌生,用它来遍历一般的List

通过Iterator遍历List

使用Iterator 遍历器对List集合进行遍历
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts2 两层list遍历<s:iterator>
举报原因:
原因补充:

(最多只允许输入30个字)