JSF马上跳起来

时间:2013-02-05 14:08:43

标签: jsf navigation scroll anchor

单击JSF commandLink时,新页面的滚动位置将为0 - 这很好。

我注意到我的一个jsf页面有一个奇怪的行为 - 但它很难解释: 单击链接以便“在某处”导航通常会冻结页面,当收到新响应时,您将最终在另一页上,并且滚动位置将被重置。这很好。

在该特定情况下,一旦点击了一个命令链接,“当前”视图立即滚动到顶部,然后转发到所需的导航结果。

就像点击一个简单的链接一样,它的锚点设置在顶部。 <a href='#'>

这可能是什么原因?感觉很奇怪,如果页面向上滚动,则单击链接。

所有页面在数据表中的命令链接基本相同。没有其他页面遇到这个问题。控制器是不同的 - 但由于向上滚动是在几毫秒内完成的,我不认为这是服务器端问题。

我注意到jsf会将#附加到生成的所有链接上。

所以,当我点击链接时,我可以看到网址在短时间内变为.../page.xhtml#(分秒,页面向上滚动),然后像{{1}一样获得重新jsft }

编辑: 对于我的所有页面,链接如下所示:

.../page.xhtml?cid=4

然而,在该页面上,最后的<a href="#" onclick="mojarra.jsfcljs(document.getElementById('openTaskTable:0:j_idt64'),{'openTaskTable:0:j_idt64:j_idt65':'openTaskTable:0:j_idt64:j_idt65'},'');return false">SVA</a> 丢失了......这使得链接的行为就像一个锚......

EDIT2: 使用return false;生成按预期工作的链接 - 使页面向上滚动的链接是<h:commandLink> s(Primefaces)。实际上,取代它,解决了这个问题,但仍然想知道对于主要方面的链接有什么不同。

edit3:示例

按预期工作:

<p:commandLink>

导致立即滚动:

<h:form style="display:inline;">
    <h:commandLink
         action="#{processManagementController.unpinProcess(process)}">
   <h:graphicImage
    style="display:inline-block; height:16px; width:16px;"
    value="/resources/img/pinned.png"
    title="Click to unpin this process" />
</h:commandLink>
 </h:form>

1 个答案:

答案 0 :(得分:1)

由于href="#",它不会滚动到顶部,而是因为同步回发(导致页面完全重新加载!)。 “edit3”中的两个示例仍然会滚动到顶部。

<f:ajax>嵌套在<h:commandLink>中,或在ajax="true"上设置<p:commandLink>以使其成为异步回发,从而让他们按照预期行事。