在视图范围内的托管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中显示的重置按钮,<p:inputText>
应该被清除,但它不会“T
showcase example表现出完全相同的东西。因此,此行为似乎已记录在案,但我不明白为什么<p:resetInut>
不清除property1
的值,如果省略reset()
方法,在这种情况下?
答案 0 :(得分:8)
<p:resetInput>
并未清除您错误预期的模型值。它只是清除输入组件的状态,在验证错误后它可能是脏的。
本答案详细描述了它试图解决的具体问题:How can I populate a text field using PrimeFaces AJAX after validation errors occur?
以下用例可以最好地理解这一点:
在“打开的对话框”按钮中将<p:resetInput>
与目标放在对话框的表单上可以修复它。
我不确定您的特定情况是否是<p:resetInput>
是正确解决方案的正确用例。您的代码不完整,并且您没有在任何地方说明此代码背后的具体功能要求,但据我所知,没有多个输入/表单需要相互更新。即使您删除<p:resetInput>
,我相信您的案例仍然有效。因此,在您的上下文中它将是完全超级的,您可以放弃清除模型(或者只是通过同步GET按钮刷新页面,隐式重新创建视图)。