[richfaces-issues] [JBoss JIRA] (RF-12831) <rich:validator/> performs ajax validation without updating underlying model field
Kamil Roman (JIRA)
jira-events at lists.jboss.org
Wed Mar 27 19:17:41 EDT 2013
[ https://issues.jboss.org/browse/RF-12831?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kamil Roman updated RF-12831:
-----------------------------
Attachment: rf-12831.zip
Hi Juraj,
I am attaching a maven project illustrating and reproducing the issue. The validation method fragment with the comment is the best explanation
{code}
public void validateField1(FacesContext context, UIComponent toValidate, Object value) {
System.out.println("argument value: " + value);
System.out.println("model value: " + model.getField1());
//my expectation is that value is equal to associated model field - validation should be performed after applying request values.
//If it is not the code will throw RuntimeException
if (!model.getField1().equals(value)) {
throw new RuntimeException("value passed to the validation method should be equal to the associated model field!");
}
//this would be a workaround to the bug
model.setField1((String) value);
//validation logic omitted
}
{code}
To reproduce the issue with the code attached:
# Unzip the file attached.
# run maven install
# deploy manually the resulting target/rf-12831.war to JBoss server.
# navigate to http://localhost:8080/rf-12831/app/pages/addModel.xhtml (assuming your JBoss listens on localhost:8080)
# Change value in field1 textbox.
# Click on field2 textbox.
# RuntimeException is thrown (manually from the validation method, see code and comment above).
> <rich:validator/> performs ajax validation without updating underlying model field
> ----------------------------------------------------------------------------------
>
> Key: RF-12831
> URL: https://issues.jboss.org/browse/RF-12831
> Project: RichFaces
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Affects Versions: 4.3.0.Final
> Environment: JBoss eap 6.0.0, Win 7
> Reporter: Kamil Roman
> Assignee: Juraj Húska
> Priority: Minor
> Labels: waiting_on_user
> Attachments: rf-12831.zip
>
>
> Not sure if it's a bug or a feature, but field annotated with {code}<rich:validator/>{code} with a validation method set with {code}validator{code} attribute gets validated without updating the underlying model field. My code is something like this:
> {code:title=Model.java}
> public class Model {
> //...
> public Date getValidFrom() {/*...*/}
> public Date getValidTo() {/*...*/}
> }
> {code}
> {code:title=ModelValidator.java}
> public class ModelValidator{
> private Model model;
> public boolean isValidToAfterValidFrom() {
> return model.getValidTo().after(model.getValidFrom());
> }
> }
> {code}
> {code:title=model_form.xml}
> <c:set var="model" value="#{ModelBean.model}"/>
> <h:outputLabel value="#{labels.getLabel('valid_from')}" for="validFrom" />
> <rich:calendar value="#{model.validFrom}" id="validFrom" >
> <rich:validator/>
> </rich:calendar>
> <rich:message for="validFrom"/>
>
> <h:outputLabel value="#{labels.getLabel('valid_to')}" for="validTo" />
> <rich:calendar value="#{model.validTo}" id="validTo" validator="#{modelBean.validateValidTo}">
> <rich:validator event="inputblur"/>
> </rich:calendar>
> <rich:message for="validTo"/>
> {code}
> {code:title=ModelBean.java}
> public class ModelBean {
> public Model getModel() {/*..*/}
> private ModelValidator validator;
> //...
> public validateValidTo(FacesContext context, UIComponent toValidate, Object value) {
> if(!validator.isValidToAfterValidFrom()) {
> FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, labelBean.getLabel("valid.to.not.after.valid.from.error"), null);
> throw new ValidatorException(message);
> }
> }
> {code}
> The getModel() method returns the same Model instance as is used by the ModelValidator in ModelBean.
> Now, the testcase is:
> 1. User selects validTo earlier than ValidFrom (on a valid Model instance)
> 2. Validation passes as the underlying model value is not updated (validator refers to the same Model instance as ModelBean)
> 3. User submits the form.
> 4. System displays error message as server-side validation on submit is performed after applying request values.
> 5. User corrects the value in validTo field.
> 6. System still displays error message as validation fails, because the new value is not applied to the model (model holds the invalid value applied during failed submit).
> If this is not a bug, but a feature, it would be great if you included this behaviour in the docs!
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the richfaces-issues
mailing list