"no" what ?

On 6/24/06, Maura Wilder <[EMAIL PROTECTED]> wrote:

no
----- Original Message -----
From: "Jesse Kuhnert" <[EMAIL PROTECTED]>
To: "Tapestry users" <[email protected]>
Sent: Saturday, June 24, 2006 11:05 AM
Subject: Re: Checkbox required validation not working


> Looks good Scott! I just wanted to say that in the upcoming 4.1 release
> the
> required generated client side javascript handles any/all form input
types
> and so will produce meaningful results universally when applied.
>
> On 6/24/06, Scott Russell <[EMAIL PROTECTED]> wrote:
>>
>> Hi Adam,
>>
>> The required validator generates client-side javascript that calls the
>> Tapestry.require_field function. This is the code of that function:
>>
>> Tapestry.require_field = function(event, fieldId, message)
>> {
>>     var field = this.find(fieldId);
>>
>>     if (field.value.length == 0)
>>       event.invalid_field(field, message);
>> }
>>
>> Problem is, for a Checkbox field, the value of the checkbox is either
>> true
>> or false, so is thus never empty. Hence it always passes the
>> require_field
>> test.
>>
>> I wrote my own RequiredCheckbox validator as follows:
>>
>> RequiredCheckbox.java
>>
>> public class RequiredCheckbox extends Required {
>>     public void validate(IFormComponent field, ValidationMessages
>> messages, Object object)
>>             throws ValidatorException
>>     {
>>         super.validate(field, messages, object);
>>         if ((object == null)
>>                 || (Boolean.class.isInstance(object) && !((Boolean)
>> object).booleanValue()))
>>         {
>>             String message = buildMessage(messages, field);
>>             throw new ValidatorException(message,
>> ValidationConstraint.REQUIRED);
>>         }
>>     }
>>
>>     private String buildMessage(ValidationMessages messages,
>> IFormComponent field)
>>     {
>>         return messages.formatValidationMessage(
>>                 getMessage(),
>>                 ValidationStrings.REQUIRED_FIELD,
>>                 new Object[]
>>                 { field.getDisplayName() });
>>     }
>>
>>     public void renderContribution(IMarkupWriter writer, IRequestCycle
>> cycle,
>>             FormComponentContributorContext context, IFormComponent
>> field)
>>     {
>>         context.registerForFocus(ValidationConstants.REQUIRED_FIELD);
>>         context.includeClasspathScript
>> ("/com/myapp/validator/BooleanValidator.js");
>>
>>         StringBuffer buffer = new StringBuffer("function(event) {
>> Tapestry.require_boolean_field(event, '");
>>         buffer.append(field.getClientId());
>>         buffer.append("', ");
>>         buffer.append(TapestryUtils.enquote(buildMessage(context,
>> field)));
>>         buffer.append("); }");
>>
>>         context.addSubmitHandler(buffer.toString());
>>     }
>> }
>>
>> BooleanValidator.js
>>
>> Tapestry.require_boolean_field = function(event, fieldId, message)
>> {
>>     var field = this.find(fieldId);
>>
>>     if (!field.checked)
>>         event.invalid_field(field, message);
>> }
>>
>>
>> Then you use it in your page file like this:
>>
>> Home.page
>>
>>     <component id="MustHaveCheckbox" type="Checkbox">
>>         <binding name="value"       value="termsAccepted"/>
>>         <binding name="validators"  value="validators:$cbValidator"/>
>>     </component>
>>
>>     <bean name="cbValidator"
>> class="com.myapp.validator.RequiredCheckbox">
>>         <set name="message"  value="message:terms.required"/>
>>     </bean>
>>
>>
>> Hope this helps.
>>
>> regards,
>> Scott
>>
>> On Saturday 24 June 2006 22:22, Adam Henderson wrote:
>> > Hi All,
>> >
>> > I'm doing a simple form that has a checkbox which must be checked in
>> > order to submit the form:
>> >
>> > <form jwcid="[EMAIL PROTECTED]" clientValidationEnabled="ognl:true">
>> >       T&C:<input jwcid="[EMAIL PROTECTED]" value="ognl:readTC"
>> > validators="validators:required"/>
>> >       <input jwcid="@Submit" listener="listener:confirm"
type="submit"
>> > name="Submit" value="Confirm"/>
>> > </form>
>> >
>> > but if I can still submit my form without the checkbox being checked,
>> > so it looks like no validation is taking place.
>> >
>> > When the page renders the js generated at the base of the html is:
>> > <script language="JavaScript" type="text/javascript"><!--
>> > Tapestry.register_form('myForm');
>> > Tapestry.set_focus('tandcCheckbox');
>> >
>> > // --></script>
>> >
>> > I'm obviously missing a trick but I can't see what it is?
>> >
>> > Thanks,
>> > Adam.
>>
>
>
>
> --
> Jesse Kuhnert
> Tacos/Tapestry, team member/developer
>
> Open source based consulting work centered around
> dojo/tapestry/tacos/hivemind.
>

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




--
Jesse Kuhnert
Tacos/Tapestry, team member/developer

Open source based consulting work centered around
dojo/tapestry/tacos/hivemind.

Reply via email to