1

JSF commandLinkをクリックすると、新しいページのスクロール位置は0になります。これは問題ありません。

jsfページの1つで奇妙な動作に気づきましたが、その正確さを説明するのは非常に困難です。「どこか」に移動するためにリンクをクリックすると、通常、ページがフリーズし、新しい応答を受信すると、別のページに移動します。ページとscrollpositionがリセットされます。これで結構です。

その特定のケースでは、コマンドリンクがクリックされると、「現在の」ビューがすぐに一番上にスクロールし、次に目的のナビゲーション結果に進みます。

プレーンリンクをクリックするようなもので、アンカーが上部に設定されています。<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;では、最後にがありません...これにより、リンクがアンカーのように動作します...

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

1 に答える 1

1

が原因で上にスクロールされませんhref="#"が、同期ポストバックが原因です(これによりページが完全にリロードされます!)。あなたの「edit3」の両方の例はまだ私のために一番上までスクロールします。

にネスト<f:ajax>する<h:commandLink>か、に設定ajax="true"して<p:commandLink>非同期ポストバックにし、意図したとおりに動作させるようにします。

于 2013-02-05T14:34:12.090 に答える