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

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

JSP

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

Действие

private Boolean myBooleanCriterion;

/* Getter and Setter */

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

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

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

Я использую (слегка нестандартный) paramsPrepareParamsStack Interceptor Stack.

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


person Andrea Ligios    schedule 07.03.2014    source источник


Ответы (1)


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

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

person Aleksandr M    schedule 07.03.2014
comment
Спасибо за ваш ответ, я уже устанавливал disabled в пустом поле, прежде чем публиковать его (но изменение name тоже приятно), я задал этот вопрос, чтобы узнать, есть ли правильный способ сделать это, который не включает создание конвертера. Вроде нет :/ - person Andrea Ligios; 10.03.2014