3 Replies Latest reply on Dec 27, 2007 4:42 AM by Marine Wacheux

    submitted (or local) values are not erasable after conversio

    Michael Heinen Newbie

      I created the following bug in the myFaces JIRA system (https://issues.apache.org/jira/browse/MYFACES-1714) but I was told that it is not a jsf implementation bug and rather caused by a4j. Therefore I add it to this forum in order to get the "ajax4jsf" opinion.

      I am facing is a serious conversion/validation problem with JSF in combination with a4j. From my point of view this is a major show stopper for jsf applications in combination with a4j.

      I created a simple demo application which is available under follwing url: https://issues.apache.org/jira/secure/attachment/12364897/validation.war

      My form contains a few input fields for Strings, dates and a number. If an invalid format is entered then the submitted value is not erased and the page is rerendered with the entered value. This is working fine so far.

      The error occurs now if I click then another ajax command that forces a refresh of the invalid fields via ajax. I use an a4j:commandButton with ajaxSingle=true and surrounded furthermore this button by an a4j:region in order to process no input fields on serverside. The values that are bound via valueBinding to the inputFields are set to null or reinitialized in the invoked ActionListener. But the old invalid data from the previous request is rerendered on the page!

      This happens because the submitted (or local) values of the invalid inputFields are not null but still contain the old invalid data. Therefore the valueBinding is not evaluated in the getter.

      I can't set the submitted value to null in the converter because invalid values should be rerendered in case that a normal processing button (not cancel button) is clicked.

      Pls have a look at the demo application:
      Call yourhost/validation/faces/test.jsp
      1) Enter some data
      (e.g name="twotest", startDate="01/01/70", endDate="01/01/70" message="hello" count=55)
      and click save
      Result: Everything works fine.The new object is rendered in the list
      2) Enter invalid data
      (e.g. number=doh)
      and click save
      Result: conversion error "Count:": value is no valid number (don't know the correct english message)
      3) Click create new
      Result: Field count does still contain the old value doh
      4) Click Edit
      Result: Field count does still contain the old value doh
      The other fields are correctly initialized

      My first approach was to except submittedValue from stateSaving but this did not solve the problem.

      I got some workarounds in the myFaces forum but all of them mean more or less the same: I would have to manually refresh (reset submitted/local values) in all areas that should be rerendered via a4j due to possible validation/conversion errors from previous requests!

      This is from my point of view impossible and not manageable in complex UIs.

      My environment
      myfaces 1.1.5
      tomahawk 1.1.5
      ajax4jsf 1.1.1
      tomcat 5.5.25

      What is your point of view regarding this major issue?