1

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

我注意到我的一个 jsf 页面有一个奇怪的行为 - 但它的 acuallty 很难解释:单击链接以导航“某处”通常会冻结页面,当收到新的响应时,你会结束另一个页面和滚动位置被重置。这可以。

在那种特殊情况下,一旦单击命令链接,“当前”视图就会立即滚动到顶部,然后转发到所需的导航结果。

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

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

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

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

所以,当我点击链接时,我可以看到 url.../page.xhtml#瞬间变为 (瞬间,页面向上滚动),然后像 re-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>

然而,在那个页面上return false;,最后缺少...然后使链接表现得像一个锚...

<h:commandLink>编辑2:使用-使页面向上滚动的链接生成按预期工作的链接,这些链接是<p:commandLink>s(Primefaces)。实际上,更换它可以解决问题,但仍然想知道 primefaces 链接有什么不同。

编辑3:示例

按预期工作:

<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>
4

1 回答 1

1

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

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

于 2013-02-05T14:34:12.090 回答