对用户列表的处理,就是如何把所查询的结果,经过不同的传递,并最终显示到页面上。
因为这次需要传递的一个数据集合,而不是单纯的数据,所要会用到ActionContext容器。
前章说到,adminwelcome存在一条需要跳转到动作findAllusr.java处理的超级链接。
findAllusr.java如下:
package com.ascent.action; import com.ascent.po.*;//首先要继承po下的所有方法与变量。 import com.opensymphony.xwork2.ActionContext;//要使用getContext()把所有数据扔到ActionContext容器里,以便前台调用 import java.sql.*; import java.util.*;//要使用List public class findAllusr{ private Connection con; private ResultSet rs; public String execute() throws Exception{ List<usr> list=new ArrayList<usr>();//创建一个仅存usr类的List一个 usr u=null; String sql="select * from usr"; con=dbcon.getCon(); rs=con.prepareStatement(sql).executeQuery(); while(rs.next()){ u=new usr(); u.setId(rs.getInt("id")); u.setUsername(rs.getString("username")); u.setEmail(rs.getString("email")); u.setTel(rs.getString("tel")); u.setSuperuser(rs.getString("superuser")); list.add(u); } //这个过程之后,这个List相当于[{id1,username1,...},{id2,username2,..},...] ActionContext.getContext().put("allUsr", list);//之后把这个List压到ActionContext容器里面,并把这个数据集合命名为allUsr return "go"; } }
<action name="findAllusr" class="com.ascent.action.findAllusr">
<result name="go">/WEB-INF/showusr.jsp</result>
</action>
表示所有的处理结果将会扔到showusr.jsp下面处理
showusr.jsp如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="/struts-tags" prefix="s"%><!-- 使用struts标签记得加程序头 --><% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'showusr.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <center> <h1> 用户列表 </h1><!-- 以下是表头静态部分 --><table border="1" width="80%"> <tr> <td> ID </td> <td> 用户名 </td> <td> 邮箱 </td> <td> 电话 </td> <td> 权限 </td> <td> 操作 </td> </tr><!-- 意思是创建一个指向数据集合allUsr的游标,然后对里面的东西一个一个地读完,不用定义循环,自动读完所有的东西 s:iterator必须在tr之外,表示创建行,在每一次循环之内。 --><s:iterator value="#request.allUsr"> <tr> <td> <s:property value="id" /> </td> <td> <s:property value="username" /> </td> <td> <s:property value="email" /> </td> <td> <s:property value="tel" /> </td> <td> <s:if test="superuser==1">普通用户</s:if> <s:elseif test="superuser==2">高权用户</s:elseif> <s:elseif test="superuser==3">管理员</s:elseif> </td> <td> 操作 </td> </tr> </s:iterator> </table> </center> </body> </html>
struts标签中的iterator是一个从上往下不停往下读取的游标,把它挂在数据集合allUsr上面。
这就是在之前的动作需要用到ActionContext.getContext().put("allUsr", list);的原因。