0

我创建了一个包含多巴哥表的 Java Web 应用程序。我现在正试图通过使用 sortActionListener 属性来覆盖工作表的排序机制。

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

这是我收到的错误消息:

org.apache.myfaces.custom.ajax.api.AjaxPhaseListener - 发现组件没有 ajaxComponent

有人知道如何解决这个问题吗?我的工作表是否必须启用 ajax 或有什么问题?

提前致谢!

更新:

我发现错误消息是由于 tomahawk-sandbox 库和多巴哥之间的冲突。删除沙箱库后,错误消息消失。尽管如此,我仍然对视图有疑问。

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

为什么会这样,我如何说服我的代码刷新 jsp 页面并因此刷新工作表?;)

4

1 回答 1

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);

比较器可以根据需要对任意数量的字段进行排序,而且速度很快;)您还可以在排序列中查看工作表的状态(升序/降序),我的第一种方法(SQL 查询)不会显示该状态。

于 2010-02-04T10:38:31.683 回答