[
https://issues.jboss.org/browse/RF-12831?page=com.atlassian.jira.plugin.s...
]
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