JAXB логическая обработка странностей и JSF - PullRequest
1 голос
/ 10 июня 2010

В JAXB есть известная ошибка: https://jaxb.dev.java.net/issues/show_bug.cgi?id=733

JAXB неправильно генерирует методы получения и установки логических полей, эта ошибка не исправлена ​​для обратной совместимости.

Плагин JAXB существует и гарантирует, что будут генерироваться следующие методы получения и установки для логических полей:

  1. setXXX (логическое значение) генерируется
  2. getXXX () генерируется
    • Если логический атрибут задает значение по умолчанию в XSD, тогда getXXX () возвращает логическое ,
    • Если логический атрибут не имеетзадайте default в XSD, затем getXXX () возвращает Boolean .

Проблема : попытка изменить / просмотреть поле XXXв компоненте JSF (например, флажок) не работает - компонент отключен.

Я использую Apache Trinidad 1.2.Компонент кодируется следующим образом:

<tr:selectBooleanCheckbox value="#{MvsDatasetUI.object.mvsDataset.temporary}" id="temporary" converter="javax.faces.Boolean" />

Я не проследил это подробно, но предположение (подкрепленное обходным решением ниже) заключается в том, что JSF EL resolver (или whathaveyou) ищет Boolean getXXX () и, поскольку он не находит его, компонент отключен.

Обходной путь : Если я изменю метод getXXX (), чтобы вернуть Boolean, то все пойдет.

Вопросы :

  • Что вы думаете о том, как решить эту проблему в кратчайшие сроки?
    • Я пропустил некоторые настройки для JAXB-плагина boolean-getter?
  • Возможно (имеет ли смысл) изменить JSF-преобразователь ( или что-то еще?), так что если Boolean getXXX () не найден, он вернется к Boolean getXXX ()?

Я бы предпочел не вмешиваться вручную и изменять все сгенерированные getXXX() методы для возврата логического вместо логического.

1 Ответ

1 голос
/ 10 июня 2010

Проблема : попытка изменить / просмотреть поле XXX в компоненте JSF (например, флажок) не работает - компонент отключен.

Я работал с JSF целую вечность, но я никогда не видел этой конкретной проблемы в JSF.Технически также невозможно, чтобы компонент был отключен в зависимости от типа его значения.Скорее, он выбросил бы PropertyNotFoundException или ConverterException всякий раз, когда свойство не может быть найдено или тип значения необратим.

Я провел быстрый тест с <h:selectBooleanCheckbox value="#{bean.checked}" /> и следующими геттерами:

  • public boolean isChecked() отлично работает.
  • public boolean getChecked() отлично работает.
  • public Boolean isChecked() выдает PropertyNotFoundException во время рендеринга (правильно).
  • public Boolean getChecked() отлично работает.

Основываясь на этой информации, я бы заново исследовал проблему и пересмотрел выводы.Разве вы не используете какой-либо автоматически сгенерированный или сторонний код JSF, который вы сами не написали?Вы тщательно проверяли код JSF?Разве это не просто использование этого свойства в каком-то атрибуте disabled?Boolean имеет значение по умолчанию null, а boolean по умолчанию falsenull, и false ведут себя по-разному в EL.

...