1

アプリケーションの 1 つを WebSphere 6.1 (JSF 1.1 Impl) から WebSphere 7.0 (JSF 1.2 Impl、Sun Impl [v7.0 のデフォルト]) に移行する際に JSF の問題が発生しています。このアプリは、カスタムの IBM JSF 機能やタグなどを提供するウィジェット (jsf-ibm.jar) であると IBM が言う IBM jar を使用しており、JSF 1.2 Impl サポートに必要なバージョンであると思われるものがあります。

アプリにヒットすると、バッキング UI クラスを持つカスタム コンポーネントの周りでエラーが発生します。最初にアクセスするとアプリは正常にロードされますが、コントロールまたは他の場所のボタンを押すと、次の例外が発生します (以下)。カスタム コンポーネントはページング コントロールであり、次のようにページに追加されます。

<appname:dataTableNav id="navTable1" dataComponent="#{appSession.cLog.cLogLine}" pageSize="#{appSession.cLogPreferences.pageSize}" startingIndex="#{appSession.caseLog.cLogPref.startingIndex}" actionListener="#{pc_Log.handleSelectedPageEvent}" backImage="images/arrow_previous.gif"forwardImage="images/arrow_next.gif" pageStyleClass="resultlinks" currentPageStyleClass="selectedPage"/>

IBM は、JSF 1.2 Impl がカスタム コントロールのレンダリングに問題を抱えていることを示唆しています。JSF 1.1 は、カスタム コントロールの状態などを保存/シリアライズし、再度レンダリングするときに 1.2 とは異なる動作をするためです。彼らは、私が追加したバッキング UI クラスに saveState および restoreState メソッドがないことを示唆していましたが、成功しませんでした。つまり、以下のコード スニペットとそのコード参照 URL です。

    ** Ref url:
    http://blog.evolutionarydawn.com/2009/06/11/custom-jsf-component-12/

    ** Our code snippet:
    public Object saveState(FacesContext context) {
        System.out.println("Out .. In DataTableNavigatorUI.saveState-Begin!");

        Object values[] = new Object[5];
        values[0] = super.saveState(context);

        values[1] = forwardImage;
        values[2] = backImage;
        values[3] = pageStyleClass;
        values[4] = currentPageStyleClass;

        System.out.println("Out .. In DataTableNavigatorUI.saveState-Exit!");
        return ((Object) (values));
    }

    public void restoreState(FacesContext context, Object state) {
        System.out.println("Out .. In DataTableNavigatorUI.restoreState-Begin!");

        Object values[] = (Object[])state;
        super.restoreState(context, values[0]);

        forwardImage = (String) values[1];
        backImage = (String) values[2];
        pageStyleClass = (String) values[3];
        currentPageStyleClass = (String) values[4];

        System.out.println("Out .. In DataTableNavigatorUI.restoreState-Exit!");
    }

IBM サポートから:

コンポーネント クラスに saveState メソッドと restoreState メソッドがありません。これにより、このカスタム コンポーネントの状態が保存および復元されず、ArrayIndexOutOfBoundsException が発生すると思われます。

このコードは、デバッグ時およびログ記録を介して呼び出され、呼び出されたときに各メソッドをデバッグでき、キャプチャおよび復元された値を検査できます (デバッグを介して検査する場合)。

以下のスタック トレースからわかるように、アプリは JSF フレームワーク コード内でフォールオーバーしているように見えます。

そのため、私たちは完全に途方に暮れているため、アイデア、解決策、またはフィードバックを歓迎します.

よろしくお願いします、スティーブン

例外スタック トレース: [8/13/12 15:01:24:101 BST] 00000029 サーブレット E com.ibm.ws.webcontainer.servlet.ServletWrapper サービス SRVE0068E: サーブレット Faces サーブレットのサービス メソッドの 1 つで作成されたキャッチされない例外がアプリケーション spocs-耳。例外が作成されました: javax.servlet.ServletException: 配列インデックスが範囲外です: com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper. java:1663) com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1597) com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:131) com.ourapp .ourapp2.ourapp3.web.filter.LogonFilter.doFilter(LogonFilter.java:173) com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188) com.ibm.ws.

4

1 に答える 1

0

Rational Application Developerを使用してJSFアプリケーションを開発しましたか?どのバージョンjsf-ibm.jarを使用していますか?JARのマニフェストファイルを見てください。同様の動作を示すバグは、RAD 8.0.4.1に含まれるJWL実装で修正されたため、RAD 8.0.4以下を使用してJSFアプリケーションを作成した場合は、8.0.4.1に移行してJWLライブラリを更新することをお勧めします。 。

于 2012-09-16T01:12:45.423 に答える