0

(jsf-2を使用)

編集可能な列が 1 つある dataTable があります。

        <h:column>
            <f:facet name="header">
                <h:outputText value="Label" style="font-weight: bold">
                </h:outputText>
            </f:facet>
            <h:inputText value="#{m.author2displayed}" rendered="#{m.editable}" size="10"/>
            <h:outputText value="#{m.author2displayed}" rendered="#{not m.editable}"/>
            <h:commandButton value="save edits" rendered="#{m.editable}" onclick="submit()" action ="#{finalCheckBean.saveedits()}"/>
        </h:column>

「編集を保存」をクリックすると、同じビューにとどまり、それが望ましい効果です (finalCheckBean.saveedits() は null を返します)。

問題: ブラウザはスクロールしてページの先頭に戻りますが、編集したばかりの行のレベルでページを表示したままにしておきたいです。どうすればそれを達成できますか?

4

1 に答える 1

2

すでに JSF2 を使用している場合<f:ajax>は、コマンド ボタンで ajax マジックを使用するだけです。実行されるコンポーネントとレンダリングされるコンポーネントを共通のコンポーネントでラップし、 および で参照executerenderます<f:ajax>

<h:column>
    <f:facet name="header">
        <h:outputText value="Label" style="font-weight: bold" />
    </f:facet>
    <h:panelGroup id="author2displayed">
        <h:inputText value="#{m.author2displayed}" rendered="#{m.editable}" size="10"/>
        <h:outputText value="#{m.author2displayed}" rendered="#{not m.editable}"/>
        <h:commandButton value="save edits" rendered="#{m.editable}" onclick="submit()" action="#{finalCheckBean.saveedits()}">
            <f:ajax execute="author2displayed" render="author2displayed" />
        </h:commandButton>
    </h:panelGroup>
</h:column>

このようにして、スクロール位置は変更されません (アクション メソッドから戻った場合、nullまたはvoidアクション メソッドから戻った場合)。

于 2012-09-24T14:25:09.837 に答える