2013-10-27 23 views
0

我有一个表单的jsp页面,并希望将数据捕获到列表中,以便我可以显示所有稍后添加的对象。Struts 2:使用模型对象持久列表

我的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框架,这是混淆了我这么多上迭代器。值设置是否错误?有关如何列出所有对象的任何提示?

+0

不清楚你在问什么...... –

+0

你想要提交表格并在行动中再次收到列表吗? –

回答

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

字段名称是错误的,你的getter & setter方法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> 
+0

他正在实施ModelDriven。 getModel()将返回列表

+0

这就是为什么我保持迭代器值为'model'。虽然我同意,但究竟需要什么还不清楚。 –

0
  1. 你缺少的SETTER为List<Student>;
  2. 使用prepare()为页面准备数据(例如,静态<select/>值),而不是设置从页面接收的业务数据;
  3. prepare();中的页面操作属性时,必须使用paramsPrepareParamsStack来访问它们;

最后,但这是基于意见,避免使用ModelDriven ...该功能并不真正有用恕我直言,并可以迅速搞定事情,特别是如果你不知道发生了什么;