Не могу снять все галочки в Struts Multibox - PullRequest
7 голосов
/ 01 марта 2010

У меня есть приложение j2ee, работающее на weblogic. Я был перепутан с моим мультибоксом.

Что я знаю о multibox, так это то, что проверенные элементы передаются в виде массива строк при отправке.

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

Можете ли вы помочь мне, пожалуйста?

1 Ответ

14 голосов
/ 04 марта 2010

Вы знакомы с методом reset () класса ActionForm?

Цель этого метода в жизни - сбросить флажки. Если у вас есть установленный флажок в вашей форме, и вы отправляете его, этот флажок будет в запросе. Если флажок снят, по запросу для него ничего не будет отправлено (отправка GET - простой способ наблюдать за этим поведением).

Когда Struts выполняет привязку запроса, он сопоставляет по имени параметры из запроса с параметрами в форме. То есть, если есть что сопоставить.

Теперь рассмотрим следующие шаги:

  • У меня есть логическое поле в ActionForm;
  • У меня также есть соответствующий флажок в форме;
  • Я отправляю форму => Struts связывает запрос, так что теперь мое свойство истинно в ActionForm;
  • Я снимаю флажок в форме и отправляю снова => по запросу для флажка ничего не отправляется => Struts нечего связывать => Ваше поле остается верным в ActionForm;

Вышеприведенное применимо для нескольких флажков, но вместо одного значения вы получаете массив.

Введите метод reset (). Это вызывается Struts перед привязкой запроса. Здесь вы можете установить значение поля в false. Если он поступит в запросе, Struts заменит его на true => OK. Если он не поступит в запрос (потому что он не проверен), значение останется ложным => OK снова.

То же самое относится и к мультибоксам. Необходимо сбросить список значений из ActionForm, уменьшив массив до нулевой длины (но не до нуля).

Если ваша ActionForm имеет область запроса, это обычно не имеет значения, потому что объект воссоздается при каждом запросе. Но для ActionForm в рамках сеанса с флажками необходимо выполнить reset ().

...