1

JAXB 中有一个已知错误:https ://jaxb.dev.java.net/issues/show_bug.cgi?id=733

JAXB 无法正确生成布尔字段 getter 和 setter,为了向后兼容,未修复此错误。

存在一个 JAXB 插件,它将确保生成以下布尔字段的 getter 和 setter:

  1. 生成 setXXX(Boolean value)
  2. 生成 getXXX()
    • 如果 boolean 属性指定 XSD 中的默认值,则 getXXX() 返回boolean
    • 如果布尔属性未在 XSD 中指定默认值,则 getXXX() 返回Boolean

问题:尝试编辑/查看 JSF 组件(例如复选框)中的 XXX 字段不起作用 - 该组件已禁用。

我使用 Apache Trinidad 1.2。组件编码如下:

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

我没有深入追踪这一点,但假设(由下面的解决方法支持)是 JSF EL 解析器(或 whathaveyou)寻找布尔 getXXX() 方法,并且由于它没有找到它,因此该组件被禁用。

解决方法:如果我将 getXXX() 方法更改为返回布尔值,那么一切正常。

问题

  • 你对如何以最快的方式解决这个问题有什么想法?
    • 我是否错过了 boolean-getter JAXB 插件的一些自定义?
  • 是否有可能(是否有意义)更改 JSF 解析器(或 whathaveyou),以便如果找不到 Boolean getXXX(),它将回退到 boolean getXXX()?

我不希望手动干预和更改所有生成的 getXXX() 方法以返回布尔值而不是布尔值。

4

1 回答 1

1

问题:尝试编辑/查看 JSF 组件(例如复选框)中的 XXX 字段不起作用 - 该组件已禁用。

我已经使用 JSF 多年了,但我从未在 JSF 中看到过这个特殊问题。从技术上讲,根据其值的类型禁用组件也是不可能的。它宁愿在找不到属性或值类型不可转换时抛出 aPropertyNotFoundException或 a 。ConverterException

<h:selectBooleanCheckbox value="#{bean.checked}" />对以下吸气剂进行了快速测试:

  • public boolean isChecked()工作正常。
  • public boolean getChecked()工作正常。
  • public Boolean isChecked()PropertyNotFoundException在渲染期间抛出(正确)。
  • public Boolean getChecked()工作正常。

根据这些信息,我将重新调查问题并审查结论。您不是在使用一些您自己没有编写的自动生成或第 3 方 JSF 代码吗?您是否仔细检查过 JSF 代码?不只是在某些disabled属性中使用此属性吗?Boolean具有默认值,null而默认boolean值为false。两者在 EL 中表现不同nullfalse

于 2010-06-10T14:28:20.273 回答