Не могу снять все галочки в Struts Multibox

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

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

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

Не могли бы вы мне помочь?

1 ответ

Решение

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

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

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

Теперь рассмотрим эти шаги:

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

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

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

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

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

Другие вопросы по тегам