私は立ち往生しており、次の問題でJSFの専門家からの外部の助けが必要です:特定のクラスのfaces-config.xmlでいくつかのコンバーターを定義したので、常にconverter-attributeまたはtagを使用する必要はありません。例えば:
<converter>
<converter-for-class>org.joda.time.DateTime</converter-for-class>
<converter-class>com.example.converter.JodaDateTimeConverter</converter-class>
</converter>
ここで、JSFコンポーネント(主にrich:extendedDataTable)のクローラーが必要です。これは、コンポーネントツリー全体を構築し、レベルごとにCSV、HTML、または後で必要になる可能性のあるものに変換します。つまり、CSV、HTMLなどにエクスポートする一般的な方法であり、毎回新たに実装する必要はありません。それはほぼ完了しており(私の古い同僚の素晴らしいアイデアのおかげで)、一部を除いてうまく機能します:
Object expressionResult = expression.getValue(FacesContext.getCurrentInstance().getELContext());
expressionResultString = expressionResult.toString();
このコマンドは、h:outputTextの値を取得し、それをStringに変換します。その最後の行は、特定のexpressionResultのカスタムコンバーターがある場合に、クラス用コンバーターに置き換えたいものです。(faces-configで指定されているように)クラスの正確なコンバーターを見つける方法がわかりません。FacesContextは、私のユースケースに役立つメソッド/オブジェクトを保持していないようです。faces-config.xmlに直接アクセスするのはちょっと間違っているようです。正しいアプローチは次のようになります。
Converter converter = magically_fetch_the_correct_converter_for_expressionResult_type;
converter.getAsString(FacesContext.getCurrentInstance(), component,
expressionResult);
コンバーターIDとコンポーネント自体に適切な属性/タグを使用すればかなり簡単ですが、そのような無駄な追加コードは避けたいと思います。
誰か助けてくれませんか?