【问题标题】:JSF jumping to anchor right awayJSF 立即跳锚
【发布时间】: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: 使用&lt;h:commandLink&gt; 生成按预期工作的链接——使页面向上滚动的链接是&lt;p:commandLink&gt;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>

【问题讨论】:

  • 如果您添加一个&lt;h:commandLink&gt; 使用示例,对我们会更好。
  • @LuiggiMendoza 添加了示例。
  • &lt;h:commandLink&gt; 没有 ajax 属性。您确定这是您的代码的真实示例吗?
  • @LuiggiMendoza 是的,只是忘记删除它,因为它之前是p:commandLink(primefaces)。如编辑 2 所述:使用 h 有效,p 会导致跳转。 (hs 输出包含 return falseps 不是 - 错误或功能?:P)

标签: jsf navigation scroll anchor


【解决方案1】:

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

&lt;h:commandLink&gt; 中嵌套&lt;f:ajax&gt;,或在&lt;p:commandLink&gt; 上设置ajax="true" 以使其成为异步回发,从而使它们按预期行事。

【讨论】:

  • 是的,它们仍然向上滚动。这就是我所说的“难以”解释的原因:没关系,发生这种情况,但 primefaces 链接会在单击链接后导致滚动 4 毫秒。 h-commandlink 在生成实际响应之前不会更改滚动位置。
  • 在您的“edit 3”中使用代码 sn-p 时,我可以重现您的问题。两个链接都向上滚动。一旦我使它们异步,两个链接都不会向上滚动。在 Mojarra 2.1.17 和 PrimeFaces 3.5 的所有 3 大浏览器中。
猜你喜欢
  • 2014-05-24
  • 2012-12-29
  • 2011-07-19
  • 2012-09-25
  • 2013-12-29
  • 1970-01-01
  • 2022-11-15
  • 2023-01-19
  • 1970-01-01
相关资源
最近更新 更多