0

(使用 jsf-2)

我有一个数据表,其中有一列可以编辑:

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

这样滚动位置将保持不变(前提是您仍然返回nullvoid从操作方法返回)。

于 2012-09-24T14:25:09.837 回答