Struts 2:使用Model对象保留List

时间:2013-10-27 01:18:50

标签: html forms struts2 struts

我有一个带有表单的jsp页面,想要将数据捕获到List中,以便我可以显示稍后添加的所有对象。

我的jsp页面上的迭代器

 <s:iterator value="model" status="rowStatus">
    <tr>
        <td><s:textfield name="model[%{#rowStatus.index}].firstName" value="%{#firstName" /></td>
        <td><s:textfield name="model[%{#rowStatus.index}].lastName" value="%{model[#rowStatus.index].lastName}" /></td>
    </tr>
</s:iterator>

我的动作类

    public class StudentAction extends ActionSupport implements ModelDriven, Preparable {

    private static List<Student> students;
    private Student student;

    public List<Student> getModel() {
        return students;
    }

    @Override
    public void prepare() {
        students = new ArrayList<>();
        student = new Student();
        student.setFirstName(firstName);
        student.setLastName(lastName);
        students.add(student);
    }

    public ArrayList<Payment> getBankList() {
        return payments;
    }

    public List<Student> getStudents() {
        return students;
    }
}

我是Struts2框架的新手,这让我很困惑。值是否设置错误?有关如何列出所有对象的任何提示吗?

2 个答案:

答案 0 :(得分:0)

<s:textfield name="model[%{#rowStatus.index}].firstName"

字段名称错误,你有getter&amp; private static List<Student> students;

的设定者

因此,该字段的名称应为students

<s:iterator value="model" status="rowStatus">
    <tr>
        <td><s:textfield name="students[%{#rowStatus.index}].firstName" value="%{firstName}" /></td>
        <td><s:textfield name="students[%{#rowStatus.index}].lastName" value="%{lastName}" /></td>
    </tr>
</s:iterator>

答案 1 :(得分:0)

  1. 您错过了List<Student>;
  2. 的SETTER
  3. 使用prepare()为页面准备数据(例如静态<select/>值),而不是设置从页面接收的业务数据;
  4. prepare();中操作页面中的属性时,您必须使用paramsPrepareParamsStack来访问它们;
  5. 最后,但这是基于意见的,避免使用ModelDriven ...该功能对恕我直言并不是很有用,并且可以快速搞砸事情,特别是如果你不知道发生了什么;