JSF如何防止commandLink重新加载页面

7

我需要防止这种情况的发生,因为当按钮被点击时,页面上的参数会丢失。

以下是我的代码:

<h:commandLink styleClass="ui-btn ui-btn-c ui-icon-arrow-r ui-btn-icon-right" value="Continuar" action="#{metaWEB.btnProximo()}" />

我在这里找到了一些结果,例如如何使命令按钮不完全刷新页面?如何使用f:ajax?
但是我的操作需要使用页面中的消息,因此需要重新加载表单,但不需要重新加载页面。
我发现这个线程https://stackoverflow.com/questions/18868130/preventing-jsf-commandbutton-from-reloading-the-page/18868374#18868374可能是我的解决方案,但我不理解他做了什么:(
谢谢您的帮助。

你了解 AJAX 吗? - Hatem Alimam
除了@BalusC的答案之外:你的listener可以是任何方法,只要确保你像这样调用它:listener="#{metaWEB.btnProximo()}" - 这里的()部分很重要。 - mabi
2个回答

13

只需将其变成ajax(异步)按钮而不是常规(同步)按钮。这只涉及将一个<f:ajax>标签嵌套在现有标签中。

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

execute="@form"告诉JSF要处理整个表单(包括在命令组件所在的表单中封装的所有输入组件)。render="@form"告诉JSF将整个表单作为ajax响应更新(因此,如果在同一个表单中显示消息,则它们也会被更新)。

不要忘记确保从按钮的操作方法返回nullvoid,否则视图可能仍会因非null/void导航结果而更改。

另请参阅:


1
我只需要调用ajax来渲染我的消息--' 你让我找对了方向^^ 非常感谢。 - Cechinel
谢谢,伙计,你救了我的一天,我卡了4个小时。 - Ikbel

3

只需记得将render="@none"更改为不重新加载页面即可...

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接