4

画像がアップロードまたは削除されるページに JSF フロントエンドを使用しています。アップロードまたは削除ボタンをクリックすると、ポストバックが発生し、ページが更新されたステータスでリロードされます。ただし、これにより、ページのスクロール位置がリセットされます。ポストバック アクションでこのページのスクロールバックを保持するにはどうすればよいですか。

4

3 に答える 3

1

actionListener でそれを行うことができます。たとえば、ページ (page.jsf など) で次のようにします。

<f:view>    
    <h:form>
        <h:commandLink actionListener="#{bean.method}">
            <h:outputText value="Submit" />
            <f:param name="anchor" value="image" />
        </h:commandLink>
    </h:form>
    <div id='result'>
        <h1><a name='image'>Image</a></h1>        
    </div>
</f:view>

マネージド Bean は次のようになります。

public class Bean {

    public void method(ActionEvent actionEvent) {

        // Get parameter
        String ancla = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("anchor");

        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect("page.jsf#" + anchor);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

お役に立てれば

于 2010-09-15T12:53:22.690 に答える
0

Apache MyFaces Tomahawkを使用している場合は、パラメーターAUTOSCROLLを設定してから、AutoScrollPhaseListenerが有効になっていることを確認できます。

この機能がJSFによって指定されているかどうかはわかりませんが、代わりにApacheMyFacesTomahawkによって追加で実装されています。

また、バージョン1.1.6より前では、AUTOSCROLLの実装にクロスサイトスクリプティングの脆弱性があることに注意してください。

于 2008-10-29T18:03:34.630 に答える
0

あなたはjqueryを使うことができます..クッキーを使う..準備ができた関数で

    $(function(){

           //set window scroll position if cookie is set
       window.scroll(0,getCookie('myCookie'));
       //unset cookie after setting scroll position
       deleteCookie('myCookie'); 

       //make this class objects keep page scroll position
       jQuery(window).unload(function() {
        setCookie('myCookie', getPageScroll());
       });
        //-------------------



    });

準備ができた関数の後に、この関数を追加します..

function setCookie(name,value) {

    var date = new Date();
    date.setTime(date.getTime()+(10*1000));
    var expires = "; expires="+date.toGMTString();
    document.cookie = name+"="+value+expires+"; path=/";
}

function getCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function deleteCookie(name) {
    setCookie(name,"",-1);
}

これがあなたを助けてくれることを願っています..

于 2014-05-15T16:56:16.397 に答える