ActionForm属性中存在对象数组如何处理
在Struts框架中,ActionForm类是用于封装请求参数并传递到Action类进行业务逻辑处理的关键组件。当ActionForm中的属性涉及到对象数组时,处理方式就变得稍微复杂一些。以下将详细介绍如何处理ActionForm属性中存在对象数组的情况。 我们需要创建一个实体类(Entity),例如`Student`,它包含一些基本属性,如用户名(username)和密码(password)。在实体类中,我们需要提供对应的getter和setter方法,以便于其他类访问和设置这些属性: ```java public class Student { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } ``` 接下来,我们需要创建一个ActionForm类,比如`MultiForm`,它继承自ActionForm,并且包含一个`Student`对象数组属性`stu`。同样,我们需要为这个数组提供getter和setter方法,但这里还需要重写`reset`方法,以便在表单提交前初始化数组的大小。在`reset`方法中,我们从请求中获取对象的数目,然后创建相应大小的`Student`对象数组: ```java public class MultiForm extends ActionForm { private Student[] stu; public Student[] getStu() { return stu; } public void setStu(Student[] stu) { this.stu = stu; } // 重写reset方法,根据请求参数初始化对象数组 @Override public void reset(ActionMapping mapping, HttpServletRequest request) { String num = request.getParameter("num"); int n; try { n = Integer.parseInt(num); } catch (NumberFormatException e) { n = 0; // 默认值或处理异常情况 } stu = new Student[n]; for (int i = 0; i < n; i++) { stu[i] = new Student(); } } } ``` 在JSP页面中,我们需要创建一个动态的表单,其中包含多个`Student`对象的输入字段。每个`Student`对象的属性(如username和password)都需要通过数组索引来引用,例如`stu[0].username`、`stu[1].password`等。这样,当表单提交时,Struts框架可以根据这些命名规则正确地将请求参数映射到`MultiForm`的`stu`数组中: ```jsp <%@ page language="java"%> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%> <html> <head></head> <body> <center> <!-- 页面传来的对象数目 --> <form action="multi.do?num=<%=num %>" method="post"> <% for(int i=0; i<n; i++){ %> username:<input type="text" name="stu[<%=i %>].username"/> password:<input type="text" name="stu[<%=i %>].password"/><br/> <% } %> <input type="submit" value="提交"/> </form> </center> </body> </html> ``` 在Action类中,我们可以从ActionForm中获取`stu`数组,并对每个`Student`对象执行相应的操作。例如,遍历数组并打印出每个学生的用户名和密码: ```java public class MultiAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { MultiForm multiForm = (MultiForm) form; Student[] users = multiForm.getStu(); if (users != null && users.length > 0) { for (int i = 0; i < users.length; i++) { Student s = users[i]; System.out.println("Student " + (i+1) + ":"); System.out.println("Username: " + s.getUsername()); System.out.println("Password: " + s.getPassword()); System.out.println("------------------------"); } } return null; } } ``` 总结来说,处理ActionForm属性中存在对象数组的情况,主要涉及以下几个步骤: 1. 创建实体类(Entity)并定义其属性。 2. 在ActionForm中声明对象数组属性,并重写`reset`方法以初始化数组。 3. 在JSP页面中动态创建表单,使用数组索引引用对象属性。 4. 在Action类中从ActionForm中获取对象数组,并进行进一步处理。 通过这种方式,Struts框架能够处理ActionForm中包含对象数组的场景,允许用户在一次表单提交中处理多个对象实例。
- 云叶知秋2011-10-15这样写是比较简单的,没有更多的例子,对我用处不大
- 粉丝: 0
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助