覆盖java tobago表排序方法不显示数据

时间:2010-01-22 09:44:03

标签: java jsf event-handling myfaces tobago

我创建了一个包含tobago表的Java Web应用程序。我现在尝试使用sortActionListener属性覆盖工作表的排序机制。

当我点击一列时,我的排序方法就开始了。我可以读出列名并做一些SQL的东西来获取我想要显示的数据。排序是由SQL查询完成的。问题是,工作表不会显示数据,它是空的。

这是我收到的错误消息:

  

org.apache.myfaces.custom.ajax.api.AjaxPhaseListener    - 找到的组件不是ajaxComponent

有谁知道如何解决这个问题?我的表格是否必须像启用ajax或出了什么问题?

提前致谢!

更新

我发现错误消息是由于tomahawk-sandbox库和tobago之间的冲突造成的。删除沙箱lib后,错误消息将消失。不过,我仍然对这个观点有疑问。

如果我手动切换事件处理程序,一切正常,因为jsp页面将在eventhandler之后重新加载。太棒了。但是如果我自己运行代码而不执行手动步骤,则不会重新加载jsp页面,因此我看不到数据。

为什么会如此,如何说服我的代码刷新jsp页面,从而刷新表格? ;)

1 个答案:

答案 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>