0

我有一个标准的 tomcat webapp,它正在查询 MySQL 数据库并将结果从 servlet 发送回 JSP。JSP 在没有传统数据表的情况下显示结果,而是通过在加载时使用脚本将结果填充到它们各自的 HTML 表中(每个结果行一个表)。

这是一个粗略的代码片段,展示了我如何填充 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>

我想知道在页面上最初填充结果后重新排序(排序)我的结果的最佳方式。页面顶部有一个下拉菜单,其值对应于每个要排序的表上的属性。实际上,我需要根据用户的排序选择来移动表格。

我考虑了以下选项:

  • 将多个结果集从 Servlet 传递到 JSP 页面,如果选择了不同的排序属性,则重新显示(刷新?)页面。 这种方法的缺点很多。我必须在数据库中运行多个数据库查询(代价高昂),将同一结果集的多个副本返回给 JSP(效率低下),并且可能不得不刷新页面(烦人),而只想重新排列结果

  • 使用 JavaScript/jQuery 重新排列页面上的表格。 这可能很难实现,并且可能需要很长时间来处理/重新显示。我不想让用户等待很长时间才能重新订购结果。

如果你们中的任何人可以对这些发表评论或就如何处理这个问题提供任何其他建议,我将不胜感激。

-鲍勃

4

1 回答 1

0

由于您已经列出了 2 个最明显的解决方案,因此这里有一个值得尝试的替代方案。

您可以定义一个 POJO 类来存放数据,而不是作为 String[][] 传递给 JSP。

例子

 Class Row{
  String attribOne;
  String attribTwo
}

这样您就可以将其作为 List< list > 传递给 jsp

如果数据不是很大,您可以将它放在会话变量中,并使用java.util.Comparator以多种方式对其进行排序。

唯一的缺点是表中的每个可排序列都有多个比较器。

当然不是最佳解决方案,我为您提供了一个替代方案,但如果您在 JS 中执行此操作,它肯定会避免额外的 Db 调用/浏览器停止

好吧,只是我的 2 美分

于 2013-02-07T12:15:10.943 回答