【问题标题】:JSF invalid behavior with jstl foreach with different jsf version具有不同 jsf 版本的 jstl foreach 的 JSF 无效行为
【发布时间】:2015-07-20 00:21:09
【问题描述】:

我不确定我应该如何描述这个问题。 我目前正在学习 JSF,今天尝试用分页实现类似 ajax reloaded table 之类的东西。

这是我在 JSF 中的代码:

<c:forEach var="pageNo" begin="0" end="${adapter.pagesNumber}">
<c:choose>
    <c:when test="#{adapter.currentPage == pageNo}">
        <li class="active"><h:commandLink value="#{pageNo+1}" disabled="true" /></li>
    </c:when>
    <c:otherwise>
        <li><h:commandLink value="#{pageNo+1}" action="#{adapter.setCurrentPage(pageNo)}">
                <f:ajax render=":#{cc.attrs.tableId} @form" />
            </h:commandLink></li>
    </c:otherwise>
</c:choose>

我使用 JSF 来自:

<dependency>
     <groupId>org.glassfish</groupId>
     <artifactId>javax.faces</artifactId>
 </dependency>

我的目的是让按钮带有页码,突出显示和禁用当前活动的页面按钮(不重新加载相同的页面)。

现在,第一个屏幕截图显示了我在执行任何操作之前的视图:(第一页):

假设我点击了第 6 页,

现在,当我使用带有版本的 JSF 时

     <version>2.2.4</version>

我得到了预期的结果:

但是当我打开上面的版本时,例如

     <version>2.2.5</version> // tested up to 2.2.11

我得到这样的东西:

点击第 9 页后,我得到了另一个“分页”序列:

1 2 3 4 5 7 8 9 6 10 11

但左下角的当前页面显示它是第 9 页。表格内容也有效。

如果相同的代码在不同的 JSF 版本中工作方式完全不同,有没有人遇到过这样的情况或者我做错了什么?这种奇怪行为的原因是什么?

【问题讨论】:

  • 请在此处发布您的 mcve(请参阅 How to Ask)而不是在 pastebin 上
  • 我后来发现在将 JSTL 与 JSF 一起使用时可能会出现不一致,从而导致诸如此类的意外行为,但它仍然没有真正解释为什么在 2.2.4 版本中它可以工作(或者至少它试图工作)预期的方式,而不是> 2.2.4。
  • 您发布的内容不是 mcve。这是一个sn-p。是的,这很奇怪,但可能是因为其他改进,当进行其他改进时,一些有效的东西(但不是专门设计用来工作的)停止工作。你试过ui:repeat btw 吗?
  • “其他改进”我的意思是在一般的 jsf 中
  • 我明白了。实际上,我通过that answer 找到了我的解决方案。现在我只是好奇,为什么它在打开新版本之前会起作用。谢谢。

标签: ajax jsf-2 pagination jstl


【解决方案1】:

对我有用的问题的解决方案是删除

<c:choose>
    <c:when>
    ....
</c:choose>

标签,只需将c:whenc:otherwise 的内容添加一个属性rendered,它需要布尔表达式,例如。

<c:when test="#{page.currentPageNumber == pageNumer}">
    <h:commandLink ... />
</c:when>

替换为:

<h:commandLink rendered="#{page.currentPageNumber == pageNumer" ... />

根本原因是我猜测JSTL和JSF的执行顺序,指向here

【讨论】:

    猜你喜欢
    • 2011-05-04
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    相关资源
    最近更新 更多