Hmmm... This seems like a normal thing to do... Strange that there isn't a 
simple solution for this....
But I will look at the optional validation framework, thx...

BTJ 

On Sun, 15 Apr 2007 15:07:20 -0600
"Andrew Robinson" <[EMAIL PROTECTED]> wrote:

> Required works as follows:
> 
> When a UIInput control is validated, after the value is converted it
> checks to see if a value is required and if it has been set (usually
> in the decode phase for almost all components). This means, that if
> your rendered is true and required is true inside the
> PROCESS_VALIDATORS phase, then it will process.
> 
> So, if your code is:
> 
> <h:inputText required="true" rendered="#{bean.something}" />
> <h:selectBooleanCheckBox value="#{bean.something}" />
> 
> First render:
> Something=true
> Therefore, the text box is rendered, and the check box is checked
> 
> User un-checks the check box & submits the form (text is not set)
> 1) RESTORE_VIEW (view restored, nothing special here)
> 2) APPLY_REQUEST_VALUES
> Submitted value of input text is set in decode
> Submitted value of check box is set in decode (getSubmittedValue() ==
> Boolean.TRUE)
> 3) PROCESS_VALIDATIONS
> Value of text box is not set, but value is required, ValidationError
> thrown here in the validateValue method of UIInput. Render response is
> called, skipping update phase
> 
> The way to fix this is that you have to apply the update of the
> checkbox *BEFORE* the validation of the text box. The problem is that
> there is no built in way to do this (immediate would move the
> validation up, but not the processUpdate call).
> 
> The optional validation framework was built to handle this:
> http://wiki.apache.org/myfaces/OptionalValidationFramework
> 
> The other way is to use binding. With binding, you have access to the
> code of the component, and can call methods on it. So:
> 
> <h:inputText required="true" rendered="#{bean.something}" />
> <h:selectBooleanCheckbox value="#{bean.something}" binding="#{bean.checkbox}" 
> />
> 
> public class Bean {
>   private boolean something = true;
>   private HtmlSelectBooleanCheckbox checkbox;
>   public boolean isSomething() { return this.something; }
>   public void setSomething(boolean something) { this.something = something; }
>   public HtmlSelectBooleanCheckbox getCheckbox() {
>     if (this.checkbox == null) {
>       this.checkbox = new HtmlSelectBooleanCheckbox()
>       {
>         public void decode(FacesContext context) {
>           super.decode();
>           if (this.isValid())
>             this.processValidators(context);
>           if (this.isValid())
>             this.processUpdates(context);
>         }
>       }
>     }
>   }
>   ...
> }
> 
> Yes this is messy, but should work.
> 
> The other messy way is to override the isRequired code in the text
> box, to look up the checkbox and use the local value or submitted
> value instead of the actual value of the control.
> 
> 
> 
> On 4/15/07, Bjørn T Johansen <[EMAIL PROTECTED]> wrote:
> > I have small problem and I was wondering how people get around this...
> >
> > I have a radiobutton with yes or no as the two choices that decides if a 
> > text field should be rendered or not (choosing yes
> > or no will submit the page)... Also if this text field is rendered, it is a 
> > mandatory field and need some input..
> >
> > If I use required = true on the text field, then when the text field is 
> > rendered and I choose the other choice of the
> > radiobuttons (that would hide the text field again), I get an error saying 
> > that an input is required in the text field (which
> > is normally correct but not this time, because I am just trying to hide the 
> > text field again)
> > If I use immediate = true, then the value of the radiobutton is not set and 
> > the text field is never rendered...
> >
> >
> > I guess this is a normal problem but not sure how to best solve this?
> >
> >
> > Regards,
> >
> > BTJ
> >
> > --
> > -----------------------------------------------------------------------------------------------
> > Bjørn T Johansen
> >
> > [EMAIL PROTECTED]
> > -----------------------------------------------------------------------------------------------
> > Someone wrote:
> > "I understand that if you play a Windows CD backwards you hear strange 
> > Satanic messages"
> > To which someone replied:
> > "It's even worse than that; play it forwards and it installs Windows"
> > -----------------------------------------------------------------------------------------------

Reply via email to