2015-05-09 194 views
1

我不知道我应该如何描述这个问题。 我目前正在学习JSF,今天试图实现类似ajax重载表与分页。JSF无效行为与jstl foreach与不同的jsf版本

这是我在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> 

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

现在,第一张截图显示了任何行动之前,我的观点:(第一页): enter image description here

可以说,我点击页码6,

而现在,当我使用JSF与

版本
 <version>2.2.4</version> 

我得到了预期的结果: enter image description here

但是,当I S女巫的版本高于例如

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

我得到这样的: enter image description here

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

1 2 3 4 5 7 8 9 6 10 11 

但当前页面中左下角说这是第9页。表格内容也是有效的。

有没有人曾经遇到像这样的情况或我做错了什么,如果相同的代码与不同的JSF版本完全不同?什么可能是这种奇怪行为的原因?

+0

请在此处发布您的mcve(请参阅[ask]),而不是pastebin – Kukeltje

+0

我后来发现,使用JSTL和JSF导致出现意外行为(如此)时可能存在不一致,但它仍然不能解释为什么与2.2.4版本的工作(或至少它试图工作)预期的方式,并与> 2.2.4不。 – Invader92

+0

你发布的内容不是mcve。这是一个片段。是的,这很奇怪,但可能是因为其他改进,有些工作(但没有专门设计的工作)在其他改进时停止工作。你有没有尝试'ui:repeat' btw? – Kukeltje

回答

0

解决方案,其工作对我来说,问题是去除

<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