0

トバゴ シートを含む Java Web アプリケーションを作成しました。sortActionListener 属性を使用して、シートの並べ替えメカニズムをオーバーライドしようとしています。

列をクリックすると、ソート方法が開始されます。列名を読み取り、SQL を実行して、今表示したいデータを取得できます。並べ替えは、SQL クエリによって行われます。問題は、シートにデータが表示されず、空であることです。

これは私が得るエラーメッセージです:

org.apache.myfaces.custom.ajax.api.AjaxPhaseListener - 見つかったコンポーネントは ajaxComponent ではありません

これを解決する方法を知っている人はいますか?私のシートは ajax 対応のようなものである必要がありますか、それとも何が問題なのですか?

前もって感謝します!

アップデート:

エラー メッセージは tomahawk-sandbox ライブラリと tobago の間の競合によるものであることがわかりました。サンドボックス ライブラリを削除すると、エラー メッセージが表示されなくなります。それにもかかわらず、私はまだビューに問題があります。

イベントハンドラーを手動でステップオーバーした場合、イベントハンドラーの後にjspページがリロードされるため、すべて正常に機能します。これは完璧です。しかし、手動でステップ オーバーを実行せずにコードを単独で実行すると、jsp ページがリロードされないため、データが表示されません。

これはなぜですか?また、jsp ページとシートを更新するようにコードを説得するにはどうすればよいですか? ;)

4

1 に答える 1

0

結果を表示するには、シート自体と対話する必要があります-これはどういうわけか意味があります;)

List<SheetData> sheetData = (List<SheetData>) sheet.getValue();

... performing SQL query ...

sheetData = sqlresult;

以上です ;) シートの値を取得し、SQL クエリを実行して結果を sheetData オブジェクトに送信します。終了すると、シートが更新されます。

しかし、SQL クエリには多くの時間がかかるため、削除することにしました (非常に巨大で複雑なデータベースです。質問しないでください ...)。私は今、コンパレータを作成することで標準的な方法をとっています。

Comparator<SheetData> comparator = null;

comparator = new Comparator<SheetData> {

    public int compare(SheetData sd1, SheetData sd2) {

        int rc = 0;

        if (rc == 0) {
            rc = sd1.getString("Field").compareTo(sd2.getString("Field"));
        }

        if (rc == 0) {
            rc = sd1.getString("Field2").compareTo(sd2.getString("Field2"));
        }

        return rc;
    }
};

Collections.sort(sheetData, comparator);

コンパレーターは、必要な数のフィールドをすばやく並べ替えることができます;) sortcolumn 内でシートの状態 (昇順/降順) を確認することもできますが、これは私の最初のアプローチ (SQL クエリ) では表示されません。

于 2010-02-04T10:38:31.683 に答える