我有一个标准的tomcat Web应用程序,它查询MySQL数据库并将结果从servlet发送回JSP。JSP显示的结果没有传统的数据表,而是通过在加载时使用一个scriplet将结果填充到各自的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重新排列页面上的表格这可能很难实施,可能需要很长时间来处理/重新显示。我不想让用户等很长时间才重新订购结果。
如果你们中的任何人能对这些发表评论,或者就如何处理这件事提供任何其他建议,我将不胜感激
-Bob
由于您已经列出了两个最明显的解决方案,因此这里有一个值得尝试的替代方案。
您可以定义一个POJO类来存放数据,而不是以String[][]的形式传递给JSP。
示例
Class Row{
String attribOne;
String attribTwo
}
以便您可以将其作为List<列表>
如果数据不是很大,可以将其放在会话变量中,并使用java.util.Comparator对其进行多种排序。
唯一的缺点是,表中的每个可排序列都有多个Comparator。
当然不是最佳解决方案,我为您提供了一个替代方案,但如果您在JS中这样做,它肯定会避免额外的Db调用/浏览器停滞。
好吧,只有我的2美分