Как стойки 1.X ActionForm обрабатывают список чистых HTML-чекбоксов? - PullRequest
1 голос
/ 20 апреля 2010

Я имею дело со старым приложением, которое использует распорки 1.2. И по какой-то причине мы используем чистую HTML-форму для представления действий в Struts. Например:

для вывода содержимого testAction.do, я пытаюсь представить себе.

пункт 1 пункт 2

Затем я связываю компонент формы TestForm с testAction.

Я не уверен, как указать свойства в форме, чтобы она принимала значение из myitem1 после того, как пользователь нажал «отправить»

Я пытался добавить getMyitem1 (), setMyitem1 (String [] items), getSelectedMyitem1 (), setSelectedMyitem1 (String [] items)

Эти методы set вызываются только при загрузке страницы.

Полагаю, мое понимание ActionForm в стойках 1.x неверно.

Пожалуйста, сообщите, спасибо.

1 Ответ

6 голосов
/ 20 апреля 2010

Во-первых, давайте немного поясним, как Struts управляет отправкой формы:

  • вы отправляете некоторые значения, используя форму HTML, для действия (в данном случае это действие Struts, обычно * .do);
  • Struts получает запросы из-за ActionServlet (указан в web.xml);
  • на основе информации, которую вы указали в файле struts-config.xml, выбран определенный класс действий (тот, который соответствует вашему запросу);
  • на основе идентифицированного действия получается форма действия (опять же на основе информации, которую вы указываете в struts-config.xml);
  • экземпляр этой ActionForm создается или перерабатывается (в зависимости от области действия формы: запрос против сеанса);
  • данные из запроса привязаны к свойствам формы ;
  • Ваш метод execute (...) вызывается с этим объектом формы.

Теперь привязка выполняется по имени; имя параметра запроса, совпадающего с именем свойства в форме . Имя параметра запроса не соответствует названию поля ввода из отправленной вами HTML-формы.

Например, если вы отправляете ввод с именем test, в вашем классе формы действия должны быть следующие средства доступа (которые соблюдают соглашение JavaBeans для свойства с именем test):

public void setTest(String val) { ... }
public String getTest() { ... }

Если к параметру test присоединен список значений (который, как я полагаю, относится к вашему списку флажков), средства доступа изменяются на тип массива:

public void setTest(String[] val) { ... }
public String[] getTest() { ... }

Но опять же имя используется для сопоставления , всегда имя.

Не уверен, что вы пытаетесь сделать с элементом 1, пункт 2. Являются ли эти значения, представленные для вашего ввода (эквивалент test)?

...