The name of the JSP bean containing the collection to be iterated (if property is not specified), or the JSP bean whose property getter returns the collection to be iterated (if property is specified).
<logic:iterate id="employee" name="employees"> 对应的语句应该是 ArrayList userArrayList = new ArrayList(); String sql="select userName,userID,roleName,users.re from users,role where users.roleID=role.roleID"; DataStore ds=DBbrige.getDataStore(sql); while (ds.next()) { User aUser=new User(); aUser.setUserName(ds.getString("userName")); aUser.setUserID(ds.getInt("userID")); aUser.setRoleName(ds.getString("roleName")); aUser.setRe(ds.getString("re")); userArrayList.add(aUser); } session.setAttribute("employees", userArrayList );
在你的action中用这句话保存一个collection对象
session.setAttribute(Constants.USER_ARRAY_KEY, userList);
userList是一个user的集合
对应的语句应该是
ArrayList userArrayList = new ArrayList();
String sql="select userName,userID,roleName,users.re from users,role where users.roleID=role.roleID";
DataStore ds=DBbrige.getDataStore(sql);
while (ds.next())
{
User aUser=new User();
aUser.setUserName(ds.getString("userName"));
aUser.setUserID(ds.getInt("userID"));
aUser.setRoleName(ds.getString("roleName"));
aUser.setRe(ds.getString("re"));
userArrayList.add(aUser);
}
session.setAttribute("employees", userArrayList );
这个类如果你找不到的话,就写一个把,最简单的get和set方法,只不过要注意的是这个类必须得序列化。
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionError;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.ArrayList;public class EmployeeListAction extends Action{
protected ArrayList getEmployees(){
Employee employee=null;
ArrayList employees=new ArrayList();
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
ServletContext context=servlet.getServletContext();
DataSource dataSource=(DataSource) context.getAttribute(Action.DATA_SOURCE_KEY );
try{
conn=dataSource.getConnection();
stmt=conn.createStatement() ;
rs=stmt.executeQuery("select * from employees,roles,departments where employees.roleid=roles.roleid and employees.depid=departments.depid");
while(rs.next() ){
employee=new Employee();
employee.setUssername(rs.getString("username"));
employee.setName(rs.getString("name"));
employee.setRolename(rs.getString("rolename"));
employee.setPhone(rs.getString("phone"));
employee.setEmail(rs.getString("email"));
employee.setRoleid(new Integer(rs.getInt("roleid")));
employee.setDepid(new Integer(rs.getInt("depid")));
employee.setDepartment(rs.getString("depname"));
employees.add(employee);
System.err.println("Username:" + employee.getUsername() +" Department:"+ rs.getString("depment") );
}
}
catch(SQLException e){
System.err.println(e.getMessage() );
}
finally{
if(rs!=null){
try{
rs.close() ;
}
catch(SQLException sqle){
System.err.println(sqle.getMessage());
}
rs=null;
}
if(stmt!=null){
try{
stmt.close() ;
}
catch(SQLException sqle){
System.err.println(sqle.getMessage());
}
stmt=null;
}
if(conn!=null){
try{
conn.close() ;
}
catch(SQLException sqle){
System.err.println(sqle.getMessage());
}
conn=null;
}
}
return employees;
}
public ActionForward execute(ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException{
String target="success";
ArrayList employees=new ArrayList();
EmployeesActionMapping employeesMappping=(EmployeesActionMapping)mapping;
if(employeesMappping.getLoginRequired()){
HttpSession session=request.getSession();
if(session.getAttribute("USER")==null){
target =new String("login");
ActionErrors errors=new ActionErrors();
errors.add(ActionErrors.GLOBAL_ERROR,new ActionError("errors.login.required"));
if(!errors.empty() ){
saveErrors(request,errors);
}
}
}
employees=getEmployees();
HttpSession session=request.getSession();
session.setAttribute("employees",employees);
return (mapping.findForward(target));
}
}
,java.util.Map或是一个数组。有三种方法可以定义这个集合:
使用运行时间表达式来返回一个属性集合的集合
将集合定义为bean,并且使用name属性指定存储属性的名称。
使用name属性定义一个bean,并且使用property属性定义一个返回集合的bean属性。
当前元素的集合会被定义为一个页作用域的bean。属性如下,所有这些属性都能使用运行时表达式。
collection 如果没有设置name属性,它就指定了要进行重复的集合
Id 页作用域bean和脚本变量的名称,它保存着集合中当前元素的句柄
indexed 页作用域JSP bean的名称,它包含着每次重复完成后集合的当前索引
Length 重复的最大次数
Name 作为集合的bean的名称,或是一个bean名称,它由property属性定义的属性,是个集合
Offset 重复开始位置的索引
property 作为集合的Bean属性的名称
Scope 如果指定了bean名称,这个属性设置bean的作用域。若没有设置,搜索范围从页到应用程序作用域
Type 为当前定义的页作用域bean的类型
或者设置Scope