0

TomcatでJSFアプリを実行しています。render属性によってリンクされている3つのリストがあります。

<h:selectOneMenu id="selectedCategory" value="#{converterBean.selectedCategory}">
    <f:ajax execute="selectedCategory" render="selectedFrom"/>
    <f:selectItems value="#{converterBean.categories}"/>
</h:selectOneMenu>
<h:selectOneListbox id="selectedFrom" value="#{converterBean.selectedFrom}" size="5">
    <f:selectItems value="#{converterBean.fromList}"/>
    <f:ajax execute="selectedCategory selectedFrom" render="selectedTo"/>
</h:selectOneListbox>
<h:selectOneListbox id="selectedTo" value="#{converterBean.selectedTo}" size="5">
    <f:selectItems value="#{converterBean.toList}"/>
</h:selectOneListbox>

クリックするとうまくselectedCategoryレンダリングされselectedFromます。その中の項目を選択するとselectedFrom、以下のようなエラーが発生します。

重大:javax.el.E​​LException:/converter.xhtml @ 44,53 value = "#{converterBean.toList}":タイプcom.primesystems.beans.ConverterBeanの「toList」の読み取り中にエラーが発生しました

より多くのスタックトレースを取得したいのですが、デバッガーで実行し、Tomcat関連のアペンダーにlog4jを追加し、beanメソッドをtry/catchで囲むのは適切ではありません。

私はmojarraバージョン2.1.7と2.2.0-m05の両方が同じ動作をすることを試しました。

コードに問題があり、converterBean.getToListメソッドで例外をキャッチしてスタックトレースをキャプチャできました。だから私が持っていた問題は解決されました。

以下にコメントをお願いします。以下のロケーターはコンバーターBeanに注入され、Conveterクラスはシリアル化できないため、シリアル化に関連する例外が発生することがあるため、以下のロジックを追加しました。

@ManagedBean(name="serviceLocater")
@ApplicationScoped
public class LocalServiceLocater implements ServiceLocater, Serializable {
transient private Converter converter;
public LocalServiceLocater() {
    converter = new Converter();
}
public Converter getConverter() {
    // TODO Auto-generated method stub
    return converter;
}

private void readObject(java.io.ObjectInputStream in)
        throws IOException, ClassNotFoundException {
        in.defaultReadObject();
        converter = new Converter();
}

}

また、同じ質問をもう1つ追加したいと思います。カテゴリを選択すると、fromリストtoリストの両方を更新する必要があります。現在、カスケードすることを期待してコーディングしていますが、リストからのみ更新されます。fromtoの両方をカテゴリajaxrender属性にレンダリングしようとましたが、代わりに2つのリクエストを実行したいのに、古いfromカテゴリを 送信します。最初にリストから入力するカテゴリを指定します。カテゴリ付きの2番目のリクエスト、fromからtoリストへの入力。

4

0 に答える 0