如何让commandButton/commandLink不完全刷新页面?如何使用f:ajax?

问题描述 投票:0回答:1

我有一个按钮可以提交表单并调用托管 bean 操作。

<h:form>
    ...
    <h:commandButton value="Submit" action="#{bean.submit}" />
</h:form>

但是当我按下按钮时,它会刷新整个页面,有时还会更改 URL。

有什么方法可以不刷新页面并仍然调用该操作吗?

jsf
1个回答
28
投票

利用 Ajax。这是将

<f:ajax>
嵌套在感兴趣的命令按钮内的问题。

<h:form>
    ...
    <h:commandButton ...>
        <f:ajax execute="@form" render="@none" />
    </h:commandButton>
</h:form>

特别是

render="@none"
(无论如何这是默认值,您可以完全省略该属性)将指示 JSF 在提交后仅重新渲染任何内容。如果您打算仅重新渲染特定组件而不是整个页面,那么您还可以在
render
属性中指定该特定组件的 ID。

<h:form>
    ...
    <h:commandButton ...>
        <f:ajax execute="@form" render="result" />
    </h:commandButton>
    ...
    <h:panelGroup id="result">...</h:panelGroup>
</h:form>

如果您已经在使用 PrimeFaces,那么只需使用

<p:commandButton>
而不是
<h:commandButton>
即可。它已经默认使用 ajax,所以你不需要嵌套在
<f:ajax>
中。您只需要记住使用属性名称
process
update
而不是
execute
render

<h:form>
    ...
    <p:commandButton ... update="result" />
    ...
    <h:panelGroup id="result">...</h:panelGroup>
</h:form>

execute
属性已默认为
@form
,因此可以省略。

另请参阅:

© www.soinside.com 2019 - 2024. All rights reserved.