11

我有一个命令按钮(具体来说是取消按钮),我想绕过对页面上某些组件的验证。当我在命令按钮上设置了 immediate="true" 时,更新属性不起作用。“不起作用”是指 :centerForm:p_definition 上的值不会重置为应有的值。如果我从下拉列表中选择一个项目或在输入文本中输入数据,则单击取消时信息应该会消失。设置 immediate="false" 或完全关闭它会按预期重置字段。这是我遇到问题的命令按钮的定义。

<p:commandButton value="Cancel" style="float: right;"
    immediate="true"
    actionListener="#{manageBomPropHandler.doCancel()}"
    update=":centerForm:p_definition"/>

这是来自 immediate="true" 的预期行为吗?如果是这样,您如何解决取消按钮的问题?

4

4 回答 4

13

“更新”将在更新模型值阶段被调用/执行。当您将“立即”属性设置为按钮命令时,此阶段将被忽略。有关详细信息,请参见下图。 标准生命周期执行更新模型值阶段

          P1: Standard Lifecycle executes Update Model Values phase

忽略立即生命周期更新模型值阶段

          P2: Immediate Lifecycle ignored Update Model Values phase
于 2014-12-05T02:35:15.413 回答
2

如果可能有帮助,已经有一个带有 primefaces 的干净输入字段的解决方案:

<p:commandButton value="Reset Tag" update="panel" process="@this" style="margin-right:20px;" >
    <p:resetInput target="panel" />
</p:commandButton>

或者

<h:commandButton value="Reset p:ajax" style="margin-right:20px;" >
    <p:ajax update="panel" resetValues="true" />
</h:commandButton>

资料来源: http: //www.primefaces.org/showcase/ui/misc/resetInput.xhtml

于 2016-04-23T07:26:05.233 回答
1

就我而言,为了更新字段,我已将 p:ajax 附加到所需的组件上。这确保了一旦用户在任何这些字段中进行更改,支持 bean 中的相应字段/变量就会更新。

我的另一个要求是在用户单击立即 - 真正的命令按钮后刷新数据表。为了做到这一点,我使用了如下代码:

RequestContext.getCurrentInstance().reset("Datatable ID"); 
于 2014-02-18T11:05:23.003 回答
0

是的,这表明我对 JSF 生命周期的无知。在这里找到答案:JSF commandButton with immediate="true"在这里:https ://cwiki.apache.org/confluence/display/MYFACES/Clear+Input+Components

于 2012-12-28T21:29:52.780 回答