The goal and problem
In a facet form I have a value. When I click the commandButton it calls an action on the Managed Bean which changes the submitted value. The updated value should be rendered on the view...but it doesn't! Note that I use immediate="true" to skip the validation phase (because validation error may be shown).[Actually what I want to do is render some numerical values and randomize them each time I click the commandButton] Managed Bean Foo.java:
public void submit() {
this.val = 3; //the new value
}
Facelet:
<h:form>
<p:inputText value="#{fooBean.val}"></p:inputText>
<p:commandButton value="Submit"
action="#{fooBean.submit()}"
update="@form"
immediate="true" />
</h:form>
The solution
Skipping validation doesn't mean that the input value is not submitted!! In the Managed Bean I change the value foobean.val and indeed changes but the component p:inputText preserves the old value because its attribute submittedValue is the old one. The solution is to use the attribute process="@this" because this way we don't submit the value!. The correct Facelet is the following:<h:form>
<p:inputText value="#{fooBean.val}"></p:inputText>
<p:commandButton value="Submit"
action="#{fooBean.submit()}"
update="@form"
immediate="true"
process="@this" />
</h:form>
No comments:
Post a Comment