我有一个按钮可以提交表单并调用托管 bean 操作。
<h:form>
...
<h:commandButton value="Submit" action="#{bean.submit}" />
</h:form>
但是当我按下按钮时,它会刷新整个页面,有时还会更改 URL。
有什么方法可以不刷新页面并仍然调用该操作吗?
<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
,因此可以省略。