Ok, found a way to do what I want.

Both buttons for my form do setDefaultFormProcessing(false)

I subclass Form and add a boolean attribute called bypassValidation with the
appropriate getters and setters.  I also override process() with my own
method that duplicates the original method, except the if clause is now if
(hasError() && bypassValidation==false)

In the OnSubmit() methods for my Buttons get the form and set the the
bypassValidation attribute.  Now I call process() and let the form update my
model.  Finally for the "Save and Exit" button I clear the FeedbackMessages
since it still gets populated with any validation errors. 

At this point the form and model are at the same state I would get from the
the normal validation process.


Jesse Foster wrote:
> 
> Two problems
> 1. updateFormComponentModels() is a protected method.
> 2. Without calling validate() first, updateFormComponentModels() updates
> the model with null values.  The actual process of taking values from the
> html form and converting them into Java objects happens inside validate()
> call.
> 
> 
> Bruno Borges wrote:
>> 
>> In each onSubmit button method, you call what you want, but don't forget
>> to
>> setDefaultFormProcessing(false) on them. This way, no validation is made
>> nor
>> models are updated. You have to control yourself inside onSubmit.
>> 
>> Call form.updateFormComponentModels();      (something like that)
>> To "Save & Exit"
>> 
>> And for the Finish button,  call validate(); and _after_ the
>> updateFormComponentModels...
>> 
>> I think this is it. :)
>> 
>> give  it a shot
>> 
>> 
>> 
>> On 10/16/07, Jesse Foster <[EMAIL PROTECTED]> wrote:
>>>
>>>
>>> Is there any way to enable/disable form validation based on which submit
>>> button I use?  My page displays surveys, which are essentially rows of
>>> radiogroups and corresponding radios displayed in table like
>>> fashion.  There
>>> are two buttons on the page, one called "Finish" that saves all the
>>> answers
>>> on the page and finalizes the survey so no further editing will
>>> occur.  The
>>> other button is "Save and Exit" which just saves the current set of
>>> answers,
>>> so even if a radiogroup has no answer I still want to update my model. 
>>> In
>>> one case with "Finish" I want to validate all radiogroups have an answer
>>> by
>>> using setRequired(true), while on the flip side with "Save and Exit" I
>>> don't
>>> need that validation.
>>>
>>> I thought of using setDefaultFormProcessing(false) on the "Save and
>>> Exit"
>>> button and then manually populating the form model but Wicket ties model
>>> populating to validation.  The updateModel() call in FormComponent
>>> simply
>>> calls getConvertedInput() to populate the model object.  ConvertedInput
>>> is
>>> assigned its value during validate().
>>>
>>> Only solution I can think of is to subclass RadioGroup and override
>>> updateModel() to convert the input and then set the model object.  If
>>> there
>>> is a cleaner or better way to do this please let me know.
>>> --
>>> View this message in context:
>>> http://www.nabble.com/Disable-form-validation-based-on-which-submit-button-used--tf4636406.html#a13241117
>>> Sent from the Wicket - User mailing list archive at Nabble.com.
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>> 
>> 
>> -- 
>> Bruno Borges
>> Summa Technologies
>> www.summa-tech.com
>> 55 11 85657739  /  55 11 30552054
>> 
>> "The glory of great men should always be
>> measured by the means they have used to
>> acquire it."
>> - Francois de La Rochefoucauld
>> 
>> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Disable-form-validation-based-on-which-submit-button-used--tf4636406.html#a13244641
Sent from the Wicket - User mailing list archive at Nabble.com.


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

Reply via email to