1

JAXB には既知のバグがあります: https://jaxb.dev.java.net/issues/show_bug.cgi?id=733

JAXB は、ブール フィールドの getter および setter を適切に生成しません。このバグは、下位互換性のために未修正のまま残されています。

JAXB プラグインが存在し、次のブール フィールドのゲッターとセッターが生成されるようにします。

  1. setXXX(ブール値)が生成される
  2. 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() メソッドを変更して、ブール値ではなくブール値を返すことは避けたいと思います。

4

1 に答える 1

1

問題: JSF コンポーネント (チェックボックスなど) の XXX フィールドを編集/表示しようとしても機能しません - コンポーネントが無効になっています。

私は長い間 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デフォルト値は ですがnullbooleanデフォルトはですfalse。EL では、nullとの両方が異なる動作をします。false

于 2010-06-10T14:28:20.273 に答える