【发布时间】:2013-02-05 14:08:42
【问题描述】:
当单击 JSF commandLink 时,新页面的滚动位置将为 0 - 这很好。
我注意到我的一个 jsf 页面有一个奇怪的行为 - 但它的 acuallty 很难解释: 单击链接以导航“某处”通常会冻结页面,当收到新的响应时,您将最终进入另一个页面并且滚动位置被重置。这很好。
在这种特殊情况下,“当前”视图会立即滚动到顶部,一旦单击命令链接,然后转发到所需的导航结果。
这就像点击一个简单的链接,它的锚点设置在顶部。 <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>s(Primefaces)。确实,替换它可以解决问题,但仍然想知道 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>
【问题讨论】:
-
如果您添加一个
<h:commandLink>使用示例,对我们会更好。 -
@LuiggiMendoza 添加了示例。
-
<h:commandLink>没有ajax属性。您确定这是您的代码的真实示例吗? -
@LuiggiMendoza 是的,只是忘记删除它,因为它之前是
p:commandLink(primefaces)。如编辑 2 所述:使用h有效,p会导致跳转。 (hs 输出包含return false、ps 不是 - 错误或功能?:P)
标签: jsf navigation scroll anchor