【问题标题】:JSF dataTable to display a fixed number of rowsJSF dataTable 显示固定行数
【发布时间】:2011-05-15 08:39:02
【问题描述】:

您好,

上下文是 myFaces 2.0.2,可能还添加了 Tomahawk 20-1.1.10

我创建了一个数据表(当前是 h:dataTable,但也可以是使用 Tomahawk 的 t:dataTable)在支持 bean 中显示 List<MyObject> 的某些属性。我通过仅返回列表的subList 进行分页,并通过单击列标题进行排序。

接下来我需要做的是确保表格始终显示固定数量的行。例如,如果我的页面大小为 5,并且列表中有 12 个项目,我需要第三页来显示最后两个项目,再加上 3 个空白行。

我试图用空值和 myObject 的实例用空值“填充”subList,但这导致ConcurrentModificationException 在点击表格的最后一页时(视图试图@987654328 @ 即使分页方法仍在添加额外的值。)。然后我尝试以相同的方式填充主列表,但随后在我的排序功能上得到了NullPointers(事后看来不费吹灰之力)。另外,当我宁愿在 xhtml 视图中执行此操作时,这些东西都会在支持者中增加开销。

(h:/t:)dataTable 确实有一个rows 属性,但这指定了要显示的最大行数,而不是我需要的最小行数。

请出主意?

【问题讨论】:

    标签: datatable jsf-2 myfaces


    【解决方案1】:

    这里的解决方案是填充主列表,而不是子列表,使用不为空但属性为空的对象,并在比较器中添加一个空检查:

    if (obj1.getSomeValue() == null) {
        return +1;
    }
    else if (obj2.getSomeValue() == null) {
        return -1;
    }
    else {
        // primary sorting code
    }
    

    这确保空项目始终排在最后。完美运行。

    BalusC 确实推动了我朝着正确的方向前进,所以我接受了他的回答。

    【讨论】:

      【解决方案2】:

      不要填充子列表。填充列表。最好是在 bean 中检索到它之后立即进行。

      【讨论】:

      • 你会注意到这是我尝试过的事情之一。结果是排序函数上的 NullPointer 异常。我正在使用匿名内部比较器类,如果对象本身为空,则函数“public int compare (MyObject obj1, MyObject obj2)”的声明是引发异常的地方。如果对象不是 null 但它们的值是 null,那么当我有时,这个函数内部会抛出异常,比如“return obj1.getStringValue().compareTo(obj2.getStringValue());”
      • 对了。然后将子列表包装在 new ArrayList 中,并在返回视图之前将其填充。
      猜你喜欢
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 2012-03-16
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      相关资源
      最近更新 更多