【问题标题】:can't use the "end" property of JSF 2.0 repeat tag's varStatus不能使用 JSF 2.0 重复标记的 varStatus 的“结束”属性
【发布时间】:2012-08-01 19:33:16
【问题描述】:

我正在使用 JSF 2.0 的 repeat 标记循环对象列表并显示它们的一些属性。我想使用repeatvarStatus 属性,这样我就可以访问循环索引、最后一个列表项的编号,并判断是否已到达列表的末尾(因此不会使用分隔符显示)。我认为这会起作用:

<ui:repeat var="anObject" varStatus="repeatStatus" value="#{objectList}">
    <h:panelGroup>
        <h:outputText value="Item #{repeatStatus.index + 1} of #{repeatStatus.end}" />
        <h:outputText value="#{anObject.text}" />
    </h:panelGroup>

    <h:outputText value="&nbsp;" rendered="#{false == repeatStatus.last}" />
</ui:repeat>

但是,它从不显示 repeatStatus.end 的任何内容。 indexlast 属性运行良好。

我尝试使用objectList.size(),而不是repeatStatus.end,但这仅适用于列表中的第一项。

如何将列表中的项目数显示为“Item x of y”文本的一部分?

【问题讨论】:

    标签: jsf jsf-2


    【解决方案1】:

    end 仅在设置size 属性时使用。

    <ui:repeat ... size="#{fn:length(objectList)}">
    

    或者,您也可以直接使用它。

    Item #{repeatStatus.index + 1} of #{fn:length(objectList)}
    

    顺便说一句,#{false == repeatStatus.last} 中的布尔比较很难看。它已经返回一个布尔值;如果您想否定它,请使用#{not repeatStatus.last}

    【讨论】:

    • 这是有道理的。但是,在这个项目中,我试图避免使用 JSTL。根据您的建议,我尝试了size="#{objectList.size()}",但没有效果。
    • 然后创建一个自定义 EL 函数。但是,我不认为这比仅使用现有的 JSTL 函数更好。也许您对“在 JSF 中避免 JSTL”过于概括了。然后阅读此问答:stackoverflow.com/questions/3342984/… 至于.size(),仅当您的环境使用 EL 2.2 或 JBoss EL 时才有效。
    • 我已将您的答案标记为“好”,尽管我还没有让它为我工作。我从未见过您的解决方案之一不起作用。 :) 我是 Java 新手,所以我不确定它为什么不起作用,但我会弄清楚的。我验证了你所说的关于 size 属性的内容。如果我在其中输入一个数字,repeatStatus.end 会显示该数字。我开始认为 JSTL 不起作用,但后来我尝试了 fn:toUpperCase 并且成功了。我认为objectList 的评价有问题。我以前遇到过这个问题,但我想我需要就此提出另一个问题。
    • 另外,非常感谢您向我指出“JSF2 中的 JSTL”问题。我不能说我完全理解你的答案,但我明白了它的要点。正如我所说,我是 Java 和 JSF 的新手,所以我在这个项目上听从了同事的建议。我认为他也对这个话题有些误解。
    • 我发布了another question 关于参数被分配方法引用而不是它们的结果。我觉得这与让fn:length 工作时遇到的问题类似。就像 JSF 在调用 fn:length(objectList) 时没有看到 objectList 的值。 objectList 应该由 getter 方法返回。
    猜你喜欢
    • 2012-05-10
    • 2011-04-05
    • 2012-02-11
    • 2013-11-26
    • 2011-10-03
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    相关资源
    最近更新 更多