JAXB中存在一个已知错误:https://jaxb.dev.java.net/issues/show_bug.cgi?id=733
JAXB没有正确生成布尔字段的getter和setter,为了向后兼容,这个bug没有固定。
存在一个JAXB插件,它将确保生成以下用于布尔字段的getter和setter:
问题:尝试编辑/查看JSF组件中的XXX字段(例如复选框)不起作用 - 该组件已禁用。
我使用Apache Trinidad 1.2。该组件编码如下:
<tr:selectBooleanCheckbox value="#{MvsDatasetUI.object.mvsDataset.temporary}" id="temporary" converter="javax.faces.Boolean" />
我没有深入追踪这一点,但假设(由下面的解决方法支持)是JSF EL解析器(或whathaveyou)寻找布尔getXXX()方法,因为它找不到它,组件是禁用。 的
解决方法:如果我将getXXX()方法更改为返回布尔值,那么一切都会进行。
问题:
我不想手动干预并更改所有生成的getXXX()方法以返回布尔值而不是布尔值。
答案 0 :(得分:1)
问题 :尝试编辑/查看JSF组件中的XXX字段(例如复选框)不起作用 - 该组件已禁用。
我已经和JSF合作了很长时间,但我从未在JSF中看到过这个特殊问题。从技术上讲,组件根据其值的类型被禁用也是不可能的。每当找不到属性或值类型不可转换时,它宁愿抛出PropertyNotFoundException
或ConverterException
。
我使用<h:selectBooleanCheckbox value="#{bean.checked}" />
和以下的getter进行了快速测试:
public boolean isChecked()
工作正常。public boolean getChecked()
工作正常。public Boolean isChecked()
在渲染过程中抛出PropertyNotFoundException
(正确)。public Boolean getChecked()
工作正常。根据这些信息,我将重新调查问题并审查结论。您是否使用了自己未编写的自动生成或第三方JSF代码?你仔细检查过JSF代码了吗?是不是只在某个disabled
属性中使用此属性? Boolean
的默认值为null
,而boolean
的默认值为false
。 null
和false
在EL中的行为都不同。