2013-02-05 29 views
1

当单击JSF commandLink时,新页面的滚动位置将为0--这很好。JSF跳转到立即锚定

我注意到我的一个jsf页面出现了一个奇怪的行为 - 但它的实用性很难解释: 点击链接以浏览“某处”通常会冻结页面,当收到新的响应时,会在另一个页面结束,滚动位置会被重置。这可以。

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

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

这可能是什么原因?这感觉很奇怪,如果页面向上滚动,你点击一个链接。

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

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

所以,当我点击链接,我可以看到网址更改为.../page.xhtml#一秒钟(在一瞬间,页面滚动了),然后让重新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;末丢失......然后让链接行为像一个锚上...

edit2: 生成工作预期链接的方式是使用<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> 
+0

如果你添加你的''用法的样本,对我们来说会更好。 –

+0

@LuiggiMendoza示例添加。 – dognose

+0

''没有'ajax'属性。你确定这是你的代码的真实样本吗? –

回答

1

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

<f:ajax><h:commandLink>,或设置在<p:commandLink>ajax="true"使其异步回发,从而让他们表现为intented。

+0

是的,它们都是向上滚动的。这就是我称之为“硬”的原因:可以这样做,但点击链接后,primefaces链接会导致像4ms一样的滚动。直到实际响应生成,h-commandlink才会更改滚动位置。 – dognose

+0

在“编辑3”中使用代码片段时,我可以重现您的问题。两个链接都向上滚动。一旦我使它们异步,两个链接都不会向上滚动。在Mojarra 2.1.17和PrimeFaces 3.5的所有三种主流浏览器中。 – BalusC