我创建了一个包含tobago表的Java Web应用程序。我现在尝试使用sortActionListener属性覆盖工作表的排序机制。
当我点击一列时,我的排序方法就开始了。我可以读出列名并做一些SQL的东西来获取我想要显示的数据。排序是由SQL查询完成的。问题是,工作表不会显示数据,它是空的。
这是我收到的错误消息:
org.apache.myfaces.custom.ajax.api.AjaxPhaseListener - 找到的组件不是ajaxComponent
有谁知道如何解决这个问题?我的表格是否必须像启用ajax或出了什么问题?
提前致谢!
更新
我发现错误消息是由于tomahawk-sandbox库和tobago之间的冲突造成的。删除沙箱lib后,错误消息将消失。不过,我仍然对这个观点有疑问。
如果我手动切换事件处理程序,一切正常,因为jsp页面将在eventhandler之后重新加载。太棒了。但是如果我自己运行代码而不执行手动步骤,则不会重新加载jsp页面,因此我看不到数据。
为什么会如此,如何说服我的代码刷新jsp页面,从而刷新表格? ;)
答案 0 :(得分: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查询)显示。 / p>