在视图范围内的托管bean中,我使用 <p:resetInput>
来清除相应托管bean中的属性所持有的值,例如,
<p:commandButton value="Reset" update="panel" process="@this">
<p:resetInput target="panel" />
</p:commandButton>
这很好。
我有一个提交按钮
<p:commandButton>
,如果验证成功,当按下该按钮时,会将提交的值插入数据库中。<p:remoteCommand name="updateTable" update="dataTable"/>
<p:panel id="panel" header="New">
<p:outputLabel for="property1" value="property1"/>
<p:inputText id="property1" value="#{bean.property1}" required="true">
<f:validateLength minimum="2" maximum="100"/>
</p:inputText>
<p:message for="property1" showSummary="false"/>
<p:commandButton id="btnSubmit"
update="panel messages"
oncomplete="if(!args.validationFailed) {updateTable();}"
actionListener="#{bean.insert}"
value="Save"/>
<p:commandButton value="Reset" update="panel" process="@this">
<p:resetInput target="panel" />
</p:commandButton>
</p:panel>
命令按钮将调用托管Bean中的
insert()
方法,该方法定义如下。public void insert() {
if (service.insert(property1)) {
//...Popup a success message.
reset(); //Invoke the following private method.
} else {
//...Show the cause of the failure.
}
}
private void reset() {
property1 = null; //Set this property of type String to null.
}
如果省略此
reset()
方法,则不会明显清除<p:inputText>
,但是如果我按XHTML中所示按下reset按钮,应清除<p:inputText>
,但不会清除。showcase example演示了完全相同的事情。因此,这种行为似乎已被记录在案,但是我不明白为什么如果省略
<p:resetInut>
方法,那么property1
不清除reset()
的值吗? 最佳答案
<p:resetInput>
不会清除模型值,就像您错误预期的那样。它只是清除输入组件的状态,该状态在验证错误后可能很脏。
此答案中详细描述了它要解决的具体问题:How can I populate a text field using PrimeFaces AJAX after validation errors occur?
通过以下用例可以最好地理解这一点:
将带有目标的
<p:resetInput>
放置在“打开对话框”按钮中的对话框表单上即可修复该问题。我不确定您的特殊情况是否是正确的用例,而
<p:resetInput>
是正确的解决方案。您的代码不完整,您也没有在任何地方声明此代码背后的具体功能要求,但据我所知,没有多个输入/表单需要相互更新。我相信,即使您删除<p:resetInput>
,您的情况仍然可以解决。因此,在您的上下文中这将是完全多余的,您可以清除模型(或者仅通过使用同步GET按钮刷新页面来隐式地重新创建视图)。也可以看看: