单击JSF命令链接时,新页面的滚动位置将为0,这很好。
我注意到我的一个jsf页面有一个奇怪的行为,但它的敏锐性很难解释:点击链接以导航到"某个地方"通常会冻结页面,当收到新的响应时,你会出现在另一个页面上,滚动位置会重新设置。这很好。
在这种特殊情况下,一旦单击命令链接,"当前"视图将立即滚动到顶部,然后转到所需的导航结果。
这就像点击一个普通的链接,只在顶部设置了锚。<a href='#'>
这可能是什么原因?如果你点击链接的那一秒页面就向上滚动,感觉很奇怪。
所有页面在数据表中对命令链接的使用基本相同。没有其他页面遇到这种问题。控制器不同,但由于向上滚动是在几毫秒内完成的,我不认为这是服务器端的问题。
我注意到jsf将#
附加到生成的所有链接中。
因此,当我点击链接时,我可以看到url在瞬间变为.../page.xhtml#
(瞬间,页面向上滚动),然后得到类似.../page.xhtml?cid=4
的重新jsft
编辑:对于我所有的页面,链接看起来是这样的:
<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>
然而,在上述页面上,末尾的return false;
不见了。。。这使得链接表现得像一个锚。。。
第2版:使用<h:commandLink>
生成按预期工作的链接——使页面向上滚动的链接是<p:commandLink>
(Primefaces)。事实上,替换它解决了这个问题,但仍然想知道素数连接有什么不同。
edit3:示例
按预期工作:
<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>
导致立即滚动:
<h:form style="display:inline;">
<p:commandLink ajax="false"
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" />
</p:commandLink>
</h:form>
由于href="#"
,它没有滚动到顶部,而是因为同步回发(这会导致页面的完全重新加载!)。你的"edit3"中的两个例子对我来说仍然滚动到顶部
在<h:commandLink>
中嵌套<f:ajax>
,或在<p:commandLink>
上设置ajax="true"
,使其成为异步回发,从而使它们按预期操作。