Input components keep their local values at state when validation fails. ResetInput is used to clear the cached values from state so that components retrieve their values from the backing bean model instead.
<div class="card">
<h:form id="form">
<p:outputPanel id="panel" styleClass="mb-2">
<h:panelGrid columns="3" cellpadding="7">
<p:outputLabel for="text1" value="Text 1:"/>
<p:inputText id="text1" value="#{resetInputView.text1}" required="true" label="Firstname">
<f:validateLength minimum="2"/>
</p:inputText>
<p:message for="text1"/>
<p:outputLabel for="text2" value="Text 2:"/>
<p:inputText id="text2" value="#{resetInputView.text2}" required="true" label="Surname"/>
<p:message for="text2"/>
</h:panelGrid>
</p:outputPanel>
<div class="flex justify-content-between">
<p:commandButton value="Submit" update="panel" action="#{resetInputView.save}" styleClass="mr-2" />
<div>
<p:commandButton value="Reset Fail" update="panel" process="@this"
action="#{resetInputView.resetFail}" styleClass="mr-2 ui-button-outlined"/>
<p:commandButton value="Reset Tag" update="panel" process="@this" styleClass="mr-2 ui-button-outlined">
<p:resetInput target="panel"/>
</p:commandButton>
<p:commandButton value="Reset Code" update="panel" process="@this"
action="#{resetInputView.reset}"
styleClass="mr-2 ui-button-outlined"/>
<p:commandButton value="Reset Non-Ajax" action="#{resetInputView.reset}" immediate="true"
ajax="false" styleClass="mr-2 ui-button-outlined">
<p:resetInput target="panel"/>
</p:commandButton>
<p:commandButton value="Reset p:ajax">
<p:ajax update="panel" resetValues="true"/>
</p:commandButton>
</div>
</div>
</h:form>
</div>
@Named
@RequestScoped
public class ResetInputView {
private String text1;
private String text2;
public String getText1() {
return text1;
}
public void setText1(String text1) {
this.text1 = text1;
}
public String getText2() {
return text2;
}
public void setText2(String text2) {
this.text2 = text2;
}
public void save() {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Data Saved"));
}
public void reset() {
PrimeFaces.current().resetInputs("form:panel");
}
public void resetFail() {
this.text1 = null;
this.text2 = null;
FacesMessage msg = new FacesMessage("Model reset, but it won't work properly.");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}