0

MySQL データベースにクエリを実行し、サーブレットから JSP に結果を送信する標準的な tomcat webapp があります。JSP は従来のデータ テーブルを使用せずに結果を表示しますが、ロード時にスクリプトレットを使用して結果をそれぞれの HTML テーブルに入力します (結果行ごとに 1 つのテーブル)。

以下は、JSP ページにデータを入力する方法を示す大まかなコード スニペットです。

<html>
  <body>
    ...

    <%
      String[][] results = ((String[][])session.getAttribute("results"));
      for (int i = 0; i < results.length; i++)
      {
         String[] rowResult = (String[])results[i];
         String tableId   = "table_" + i;
         String attribOne = rowResult[0];
         String attribTwo = rowResult[1];
    %>

    <table id="<%= tableId %>" >
      <script>
        var table = document.getElementById("<%= tableId %>");
        table.setAttribute("attribOne", "<%= attribOne %>");
        table.setAttribute("attribTwo", "<%= attribTwo %>");
      </script>
      ...
    </table>

    <%
      }
    %>

  </body>
</html>

結果が最初にページに入力された後で、結果を並べ替える (並べ替える) 最善の方法を知りたいです。ページの上部にドロップダウン メニューがあり、その値は並べ替えに使用する各テーブルの属性に対応しています。実際には、ユーザーの並べ替えの選択に基づいてテーブルを移動する必要があります。

次のオプションを検討しました。

  • 複数の結果セットをサーブレットから JSP ページに渡し、別の並べ替え属性が選択されている場合はページを再表示 (更新?) します。このアプローチには多く の欠点があります。データベースで複数のデータベースクエリを実行する必要があり (コストがかかります)、同じ結果セットの複数のコピーを JSP に返さなければならず (非効率的です)、結果を再配置したいだけでページを更新する必要があります (煩わしい)。

  • JavaScript/jQuery を使用して、ページ上のテーブルを再配置します。 これは実装が非常に難しい可能性があり、処理/再表示に時間がかかる場合があります。結果が再注文されるまで、ユーザーを長時間待たせたくありません。

これらについてコメントしたり、これを処理する方法について他の提案を提供したりすることができれば、非常に感謝しています.

-ボブ

4

1 に答える 1

0

あなたはすでに2つの最も明白な解決策をリストしているので、ここに試す価値のある代替案があります。

String [] []としてJSPに渡す代わりに、データを格納するPOJOクラスを定義できます。

 Class Row{
  String attribOne;
  String attribTwo
}

それをList<list>としてjspに渡すことができるようにします

データがそれほど大きくない場合は、セッション変数にデータを含めることができ、java.util.Comparatorを使用して複数の方法で並べ替えることができます。

唯一の欠点は、テーブル内の並べ替え可能な列ごとに複数のコンパレータがあることです。

確かに最適な解決策ではありませ。代替案を提示しますが、JSで実行すると、余分なDb呼び出しやブラウザーの停止を確実に回避できます。

さて私の2セント

于 2013-02-07T12:15:10.943 に答える