Има известен бъг в JAXB: https://jaxb.dev.java.net/issues/show_bug.cgi?id=733
JAXB не генерира правилно средства за получаване и настройка на булево поле, тази грешка е оставена некоригирана за обратна съвместимост.
Съществува плъгин JAXB и ще гарантира, че се генерират следните гетери и сетери за булеви полета:
- генерира се setXXX(булева стойност).
- getXXX() is generated
- If the boolean attribute specifies default value in the XSD, then getXXX() returns boolean,
- Ако булевият атрибут не указва по подразбиране в XSD, тогава getXXX() връща Boolean.
Проблем: опитът за редактиране/преглед на полето XXX в JSF компонент (като квадратче за отметка) не работи - компонентът е деактивиран.
Използвам Apache Trinidad 1.2. Компонентът е кодиран, както следва:
<tr:selectBooleanCheckbox value="#{MvsDatasetUI.object.mvsDataset.temporary}" id="temporary" converter="javax.faces.Boolean" />
Не съм проследил това в дълбочина, но предположението (подкрепено от заобиколното решение по-долу) е, че JSF EL резолверът (или каквото знаете) търси булев метод getXXX() и тъй като не го намира, компонентът е деактивиран.
Заобиколно решение: Ако променя метода getXXX(), за да връща булево значение, тогава всичко върви.
Въпроси:
- What are your ideas on how to address this problem en-masse in the fastest way possible?
- Have I missed some customization for the boolean-getter JAXB plugin?
- Възможно ли е (има ли смисъл) да се промени JSF резолвер (или whathaveyou), така че ако Boolean getXXX() не бъде намерен, той да се върне към boolean getXXX()?
Бих предпочел да не се намесвам ръчно и да променям всички генерирани методи getXXX(), така че да връщат Boolean вместо boolean.