Hello again all !
        
        With the help of Sylvain and Thorsten I have managed to come up with 
the form.
        Now - when all data is valid, all works fine.
        The problem starts when the data is not valid.

        I have 3 widgets in my form - text field and a select list. (See 
definition below)
        On the text field there is a validation of length, and on the select 
list there is no validation, but the first "item" of it is a null record - to 
show an empty slot.
        On the "form" there is a validation so that either of the 2 fields must 
contain value. (See definition below)

        When I first show the form all is fine.

        When I enter a too-short string in the text field, I get a strange 
behavior: I can see the error message stating it is too short, but I can also 
see the error message stating that either of the fields should be entered 
(coming from the "form level" validation function) - like nothing was entered 
in the text field. I added a "print" line into the form validation, to see that 
even though I have entered a value in the text field (it was too short - but it 
was there) the widget value is actually null. (see the "print" in the flow 
below).

        Also - I would expect the validation to stop after it was failing on 
the "too-short" text field widget validation. Why has it continued to the "Form 
level" validation at all ?

        Another strange behavior was, that after I submitted the form with 
valid data, I could see the results. When I pressed "Back" button of the 
browser - I got back to the form page, with all the error messages still 
showing. The fields are showing the valid data which I put in, but the errors 
from the first trail are still there. Why is that ? 

        And the third issue - When I am not using the "Back" button, but 
instead using the original "link" to the form page, I get other results - I can 
see the form in the state it was after I entered a "too-short" string in the 
text field !! This is after I have already changed the data to valid, 
submitted, got my results, and return to the form page using its link 1 minute 
after.. I even get the results opening a new browser window, in a different 
process. Only "restart" to the web server removes it.
        Is this the normal behavior ? Should I reset the form in some manner ?

        I am attaching down the needed text from the flow and form description 
- maybe it can help you understand my problems.

        Thank you very much for reading my long post :)

Elad

**************
<fd:form
  xmlns:fd="http://apache.org/cocoon/forms/1.0#definition";>
  
  <fd:validation>
        <fd:javascript>
                validateRestaurantForm(widget);
        </fd:javascript>    
  </fd:validation>

  <fd:widgets>  
        <fd:messages id="errors">
                <fd:datatype base="string"/>
        </fd:messages>
    <fd:field id="name">
      <fd:label>Name</fd:label>
      <fd:hint>Hint Hint</fd:hint>
      <fd:datatype base="string"/>
      <fd:validation>
        <fd:length min="2">
                <fd:failmessage>You should add name</fd:failmessage>
            </fd:length>
      </fd:validation>
    </fd:field>

    <fd:field id="type">
      <fd:label>Type</fd:label>
      <fd:datatype base="integer"/>
      <fd:selection-list type="flow-jxpath" list-path="restTypeList" 
value-path="id" label-path="name"/>
        </fd:field>
  </fd:widgets>

</fd:form>
**************

function validateRestaurantForm (form){
        print ("Start validateRestaurantForm");
        var success = true;
        var nameWidget = form.lookupWidget("name");
        var typeWidget = form.lookupWidget("type");
        var errorsWidget = form.lookupWidget("errors");

        print ("Name: " + nameWidget.value + " Type: " + typeWidget.value);
        if (typeWidget.value == null && nameWidget.value == null ) {
                errorsWidget.addMessage("You must either select a name or 
type");
                print ("set the errors and return false");
        success = false;
        }
        return success;
}

**************


-----Urspr�ngliche Nachricht-----
Von: Sylvain Wallez [mailto:[EMAIL PROTECTED] 
Gesendet: Dienstag, 31. Mai 2005 21:08
An: [email protected]
Betreff: Re: CFORMS - Performing a Form level validation

Messing, Elad wrote:

> Hi all
>         I tried looking for a "definition" text on the preferred way 
> of performing a Form level validation.
>         What I mean is that I need to perform validation that is 
> relevant to the Form -not to specific widget. I.E. - I have a form 
> with 2 widgets, and I need to check that either 1 of them has a value 
> in it.
>
>         So - I know I can have a validation in one of the widgets, and 
> in it write some javascript to check the other as well, and then 
> output the error to a "fi:validation-errors" tag - to show it in a 
> central place.
>
>         But this seems like a work around rather than a real plan..
>

You can add a <fd:validation> on any widget, including a form. But not every 
widget can hold validation errors, as not every widget has a visual 
representation.

So validation on non-visual widgets should set validation errors on one of 
their child widgets. Another option if there's no suitable widget to attach the 
error to is to add the error text to a <fd:message> widget.

For more details, see the javadocs of
o.a.c.forms.validation.WidgetValidator and form1.xml in the samples: the 
"contacts" repeater has a validator that checks row uniqueness and sets an 
error on the duplicate rows.

>         A second and related question will be - In my form with 2 
> widgets, each one of them has its own validation. So - they are not 
> required, but in case the user enters something into them, It should 
> be validated. After this validation, I will need to have the "Form 
> Level" validation I mentioned above.
>

That should occur automatically.

Hope this helps,
Sylvain

-- 
Sylvain Wallez                        Anyware Technologies
http://apache.org/~sylvain            http://anyware-tech.com
Apache Software Foundation Member     Research & Technology Director


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to