Как сохранить состояние NULL в логическом значении, посылая пустую строку из JSP в Action

У меня есть критерий на странице поиска, который является boolean, Поскольку это не обязательно, я не могу использовать флажок, потому что я могу пропустить его;

JSP

<s:select list = '#{ "":"Make your choice...", true:"FOO", false:"BAR" }'
          name = "myBooleanCriterion" />

действие

private Boolean myBooleanCriterion;

/* Getter and Setter */

Мы знаем это boolean по умолчанию false, в то время как Boolean по умолчанию null, то при первом отображении страницы все в порядке (отображается"Сделайте свой выбор").

Однако после POST Struts создает экземпляр Boolean свойство (по умолчанию это false) даже когда находит "" в качестве значения, поэтому, когда я возвращаюсь в JSP, значение предварительно выбирается для false ("БАР").

Как я могу поручить Struts не создавать экземпляр этой переменной, если значение ""оставив его в оригинале, null государство? Нужно ли создавать конвертер или указать что-то в .properties файл? (Я в основном такой же код, как в примере.2 из этого ответа)

Я пользуюсь (немного кастом) paramsPrepareParamsStack Стек перехватчиков.

Я чувствую себя так, будто мне не хватает чего-то глупого.

1 ответ

Решение

Поскольку XWorkBasicConverter новообращенные boolean-с точно так же, как он преобразует Boolean-s, используя Boolean.valueOf() метод, пустая строка или null будет преобразован в false,

Чтобы иметь null после отправки вам нужно создать собственный конвертер для Boolean или не отправляйте этот параметр вообще. (Например, изменить name атрибут с JavaScript, если выбранное значение "").

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