html-el: флажок устанавливается после отображения ошибки проверки Struts

У меня очень простая проблема. Ниже приведен мой код JSP, где я отображаю несколько флажков в строках. По умолчанию все флажки отмечены, и если пользователь хочет игнорировать определенную строку, он снимает флажок этой строки.

Моя проблема заключается в том, что если флажок строки не установлен и из-за некоторых других полей, если Struts выдает ошибку проверки формы на экране, невыбранный флажок отображается обратно как отмеченный. Я что-то упускаю? Если проверки struts нет, то все выглядит правильно.

<c:forEach var="map" items="${form.displayList}" varStatus="index"> 
    <html-el:checkbox styleId="someCheckbox_${index.index}" property="someCheckboxes[${index.index}]"  />
     <td> .....</td>
     <td> .....</td>
     <td> .....</td>
</c:forEach>

person JavaKB    schedule 13.07.2012    source источник
comment
Что делает свойство setSomeCheckboxes вашей формы? Опубликуйте код для этого и getSomeCheckboxes, если это возможно, и код в вашем действии, который показывает проверку.   -  person Martin Wilson    schedule 16.07.2012


Ответы (1)


Когда вы отправляете данные в Struts, происходит следующее:

  • В Struts есть фронт-контроллер, и все запросы проходят через этот контроллер. Это ActionServlet, который затем на основе того, что было настроено в struts-config.xml, передает запрос соответствующему Класс действий.
  • прежде чем это произойдет, ActionForm экземпляр создается или используется повторно, если это сохраненная в сеансе форма;
  • reset() вызывается в ActionForm. Здесь вы сбрасываете свойства флажка на false. Это необходимо, потому что неотмеченные флажки HTML не отправляются в запросе при отправке, поэтому Struts не запрашивает привязку данных для них (если они были отмечены при загрузке страницы, они остаются отмеченными, даже если пользователь снял их при отправке);
  • форма действия заполняется данными запроса (любые отмеченные галочки теперь отмечены, те, которые не были отправлены при отправке, остаются не отмеченными из-за предыдущего сброса);
  • вызывается метод validate() формы ActionForm, если это указано в struts-config.xml;
  • если проверка не пройдена, элемент управления возвращается во входной JSP, если это указано в struts-config.xml (представленные данные — это то, что будет отображаться на странице, поскольку они находятся в ActionForm);
  • если вместо этого проверка прошла успешно, вызывается метод execute() класса Action;
  • Класс действия выполняет свою работу и перенаправляет на какой-либо JSP.

Это то, как вы используете Struts? Я предполагаю, что вы выполняете некоторые заполнения/сброс/проверки в классе Action, и когда проверка не удалась, вы перезагружаете ActionForm с данными по умолчанию.

Проверьте свою форму ActionForm на наличие кода reset() и validate() и свой класс Action на наличие execute() и посмотрите, где данные проверяются.

person Bogdan    schedule 17.07.2012