On Wed, 2005-10-26 at 13:31 -0400, Ben Anderson wrote:
> Hi,
> So I was trying to put javascript validation right into my form
> definition, but ran into some funkiness (at least from my
> perspective).
> 
> First of all I realized that putting the javascript in a field doesn't
> "invalidate" the form:
> 
> Here's my form definition:
>   <fd:validation>
>     <fd:javascript>
>       <fd:failmessage>failed on form</fd:failmessage>
>       cocoon.log.debug("form returning false");
>       return false;
>     </fd:javascript>
>   </fd:validation>
>   <fd:widgets>
>     <fd:field id="action">
>       <fd:label>action</fd:label>
>       <fd:datatype base="string"/>
>       <fd:validation>
>         <fd:javascript>
>           cocoon.log.debug("widget returning false");
>           return false;
>         </fd:javascript>
>       </fd:validation>
>     </fd:field>
> 
> What's interesting is that both log messages are printed.  However, if
> I change the <fd:javascript> on the form to return true then
> widget.isValid() returns true even though my action field still
> returns false.  CForms online documentation for <fd:javascript> says
> to consult the examples in the source.  I only found one example and
> it is directly under the form (not the widget).
> 
> Question #1: This leads me to believe that maybe I can't put
> <fd:javascript> under the <fd:field><fd:validation> element?
> 
> Also, the <fd:failmessage> element was wishful thinking on my part
> which doesn't seem to do anything.  The xml of the form looks the same
> after the forms transformer whether I return true or false.  
> 
> Question #2: Using <fd:javascript> for validation, is there a way to
> get messages printed out at all let alone something useful like this
> 
> <fd:javascript>
>   if (!someDAO.getOrders().size() > 0) {
>     // send "must attach order" message
>   } else if (!someOtherDAO.isValidCustomer()) {
>     // send "must register first" message
> ...
> 
> Maybe I'm just pushing the limits of the javascript validator... any
> ideas?

In the javascript validation (or in any validation for that matter), if
you return false, you should also set a validation error on the widget
to which the validator belongs, or a child/descendant widget of that
widget (e.g. in case the validator belongs to a form or repeater).

Have a look at the source of the samples for how to do this.

-- 
Bruno Dumon                             http://outerthought.org/
Outerthought - Open Source, Java & XML Competence Support Center
[EMAIL PROTECTED]                          [EMAIL PROTECTED]


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