JAXB には既知のバグがあります: https://jaxb.dev.java.net/issues/show_bug.cgi?id=733
JAXB は、ブール フィールドの getter および setter を適切に生成しません。このバグは、下位互換性のために未修正のまま残されています。
JAXB プラグインが存在し、次のブール フィールドのゲッターとセッターが生成されるようにします。
- setXXX(ブール値)が生成される
- getXXX()が生成されます
- boolean 属性が XSD でデフォルト値を指定している場合、getXXX() はbooleanを返します。
- 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 を返すと、すべてがうまくいきます。
質問:
- この問題をまとめて可能な限り迅速に解決する方法について、あなたのアイデアは何ですか?
- boolean-getter JAXB プラグインのカスタマイズを見逃していませんか?
- Boolean getXXX() が見つからない場合に boolean getXXX() にフォールバックするようにJSF リゾルバー (または whathaveyou ) を変更することは可能ですか (意味がありますか)?
手動で介入して、生成されたすべての getXXX() メソッドを変更して、ブール値ではなくブール値を返すことは避けたいと思います。