使用Struts 1.3。
使用<logic:iterate>
标记将表单提交为集合我想格式化多个用户记录以编辑值。
当数据提交回Action
时,它如何处理Action表单中的表单列表?有没有办法将结果作为表格集合提交?
例如,我有List<EmployeeForm>
,我正在我的jsp页面上迭代这些记录,它运行正常。但是记录在JSP页面上是可编辑的,因此在修改记录并按下提交按钮后,我需要List<EmployeeForm>
在我的动作类中包含更新的记录,以更新数据库中的记录。
更新,我的jsp页面如下:
<html:form action="modify.do" styleId="LogicIterateForm" method="post">
<table style="font-weight:bold">
<tr><td>Employee ID</td><td>Employee Name</td></tr>
<logic:iterate id="employee" name="LogicIterateForm" property="emp" indexId="i">
<tr>
enter code here
</tr>
</logic:iterate>
<tr>
<html:submit onclick="submitForm()">Modify</html:submit>
</tr>
</table>
</html:form>
操作:点击Modify
按钮
LogicIterateForm logicIterateForm=(LogicIterateForm)form;
List<Employee> empList=logicIterateForm.getEmp();
System.out.println("Size of emp:::::"+empList.size());
if(empList!=null && empList.size()>0)
{
for(Employee emp:empList)
{
if(emp!=null)
{
System.out.println("EmployeeID:::::::::::"+emp.getEmpId());
System.out.println("EmployeeName:::::::::::"+emp.getEmpName());
}
}
}
并且在行动中发送员工列表工作正常,但遗憾的是我无法在我的操作中获取更新的表单字段值。请帮助我,我在做错了。
以下是我的ActionForm
public class LogicIterateForm extends org.apache.struts.action.ActionForm {
private List<Employee> emp=new ArrayList<Employee>();
public List<Employee> getEmp() {
return emp;
}
public void setEmp(List<Employee> emp) {
this.emp = emp;
}
和Employee类是一个带有setter and getter of empId and empName
答案 0 :(得分:2)
简言之,版本生成的HTML将具有不正确的name
属性。 ActionForm
列表属性名为emp
,但您将其称为employee
。
较长的版本包含一些其他杂项,从长远来看,这些东西应该会让你更轻松。
首先,这是我用来显示表单的Action
。请注意,我没有明确地将任何内容放入范围 - 框架为我们做了这个。看起来好像是明确地将表单设置为<logic:iterator>
使用的范围,但这是多余的。
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
Employee emp1 = new Employee("1", "Dave");
Employee emp2 = new Employee("2", "Subodh");
((LogicIterateForm) form).setEmp(Arrays.asList(emp1, emp2));
return mapping.findForward("success");
}
其次,由于上述原因,JSP页面可以变得更简单。请注意,input元素的名称必须与表单emp
中的名称匹配,否则Struts将不知道如何处理输入值,它将被忽略。
<logic:iterate name="empForm" property="emp" id="emp">
<tr>
<td><html:text name="emp" value="${emp.empId}" property="empId" indexed="true"/></td>
<td><html:text name="emp" value="${emp.empName}" property="empName" indexed="true"/></td>
</tr>
</logic:iterate>
然后,在提交给所有数据的操作内部将按预期显示在表单中。
List<Employee> emps = ((LogicIterateForm) form).getEmp();
for (Employee emp : emps) {
System.out.printf("%s: %s%n", emp.getEmpId(), emp.getEmpName());
}
应该这样做。