单击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>
答案 0 :(得分:1)
由于href="#"
,它不会滚动到顶部,而是因为同步回发(导致页面完全重新加载!)。 “edit3”中的两个示例仍然会滚动到顶部。
将<f:ajax>
嵌套在<h:commandLink>
中,或在ajax="true"
上设置<p:commandLink>
以使其成为异步回发,从而让他们按照预期行事。