Отправка форм в виде коллекции с использованием тега <logic: iterate> в Struts1.3 - PullRequest
0 голосов
/ 14 ноября 2011

Использование Struts 1.3.

Отправка форм в виде коллекции с использованием тега <logic:iterate> Я хочу отформатировать несколько записей пользователя для редактирования значений.

Когда данные отправляются обратноAction как он может обрабатывать список форм в форме действий?Есть ли способ отправить результаты в виде набора форм?

Например, у меня есть List<EmployeeForm>, и я перебираю эти записи на моей странице jsp, и она работает нормально.Но записи можно редактировать на странице JSP, поэтому после изменения записей и нажатия кнопки отправки мне потребуется List<EmployeeForm> с обновленными записями внутри моего класса действий для обновления записей внутри БД.

update, myНиже приведена страница 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 - это плановый класс Java с setter and getter of empId and empName

1 Ответ

2 голосов
/ 15 ноября 2011

В двух словах, сгенерированный 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());
}

Это должно сделать это.

...