В двух словах, сгенерированный 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 можно упростить. Обратите внимание, что имя элемента ввода должно совпадать с именем в форме 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());
}
Это должно сделать это.