Как динамически устанавливать / получать значения флажков из сервлета - PullRequest
7 голосов
/ 24 июля 2011

Это больше логический вопрос. У меня есть флажок на веб-странице, и я сохраняю его значение из параметров запроса сервлета в логическом объекте (Java). Логика заключается в том, что если параметр запроса для флажка не является нулевым, сделать объект истинным, в противном случае он будет нулевым. Когда страница вызывается снова, она помечает флажок как «проверено», если ее сохраненное значение равно true.

this.checkbox = (servlet.getParameter("checkbox")!=null && servlet.getParameter("checkbox").contentEquals("on"))?true:null;

Проблема начинается, когда я сохраняю этот объект флажка. Сначала я заполняю страницу постоянными данными, а затем заполняю ее значениями сервлета. Если значение флажка сохранено как истинное в базе данных, и пользователь снимает флажок на странице и отправляет его, так как параметр сервлета для флажка становится пустым, я не могу сделать флажок пустым. Поэтому флажок всегда показывает постоянное значение, поскольку оно никогда не перезаписывается. Так кто-нибудь может предложить некоторые логические изменения в том, как я заполняю значение объекта?

Ответы [ 2 ]

17 голосов
/ 24 июля 2011

Единственный действительный тест для флажка - посмотреть, вернет ли getParameter() null или нет.

Если возвращаемое значение равно null, оно не проверяется, в противном случае проверяется.

Обратите внимание, что атрибут checked должен присутствовать, если вы хотите, чтобы флажок был установлен на первой странице презентации, и не должен присутствовать вообще, если вы хотите, чтобы он был снят. Значение параметра всегда должно быть checked, как в примере ниже.

<label>
  <input
    type="checkbox" 
    id="cb_id"
    name="cb_id"
    value="cb_id_value"
    checked="checked"
  />
  My label
</label>

В этом примере у вас может быть такая логика в коде обработки вашего сервлета:

HTTPServetRequest request = ...;

boolean cbState = request.getParameter( "cb_id" ) != null;

Обратите внимание, что если флажок установлен пользователем в приведенном выше примере, getParameter вернет "cb_id_value", но, поскольку у вас обычно есть один флажок с выделенным именем, вам не нужно проверять значение.

Кстати, я заметил в вашем примере, что вы используете от servlet до getParameter. Я надеюсь, что в вашей системе это прозвище для HTTPServletRequest.

0 голосов
/ 24 июля 2011

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

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

При отправке формы вы должны обновить значение базы данных до true, если флажок установлен, и false в противном случае.

При отображении формы вы должны включить атрибут «флажок» в тег, только если значение базы данных true.

...