(使用jsf-2)
我有一个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)。
问题:浏览器全部滚动到页面顶部,而我希望页面保持显示在刚编辑的行的级别。我怎样才能做到这一点?
答案 0 :(得分:2)
如果你已经在使用JSF2,只需在命令按钮中使用<f:ajax>
引入一些ajax魔法。将待执行和渲染的组件包装在一个公共组件中,并在execute
的{{1}}和render
中引用它。
<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
)。