2005/5/20, Martin Marinschek <[EMAIL PROTECTED]>:
> Now what happens when a component is not rendered at all and returns a
> null value - you validate it anyways?

No, the processDecodes method in UIInput checks, if the component is
rendered or not and
calls validate only if rendered is true. I only set the submittedValue
of the component to
simulate a submit for the components on a hidden tab-pane.

> 
> Shouldn't only those components who submit a value be validated?
> 

Yes, as we can read in the spec - but the the TabbedPane component
submits only the
components on the visible pane. The invisible components are not
submitted. The behavior without my patch is crazy (see bug
description) and a real blocker for my project.

Regards,

Philipp

> regards,
> 
> Martin
> 
> On 5/20/05, Philipp Ahlner (JIRA) <myfaces-dev@incubator.apache.org> wrote:
> >      [ 
> > http://issues.apache.org/jira/browse/MYFACES-214?page=comments#action_65833 
> > ]
> >
> > Philipp Ahlner commented on MYFACES-214:
> > ----------------------------------------
> >
> > Since submittedValue should be a String some converting-jobs are to do. A 
> > improved patch is following, I hope someone is interested.
> >
> > /**
> >  *
> >  */
> > package de.interforum.jsf.myfaces.ext.tabbedpane;
> >
> > import java.util.Iterator;
> >
> > import javax.faces.FacesException;
> > import javax.faces.component.UIComponent;
> > import javax.faces.component.UIInput;
> > import javax.faces.context.FacesContext;
> > import javax.faces.convert.Converter;
> >
> > import org.apache.myfaces.custom.tabbedpane.HtmlTabbedPaneRenderer;
> >
> > /**
> >  * @author ahlner
> >  */
> > public class TabbedPaneRenderer extends HtmlTabbedPaneRenderer
> > {
> >
> >     public void decode(FacesContext facesContext, UIComponent uiComponent)
> >     {
> >         super.decode(facesContext, uiComponent);
> >         fakeSubmittedValue(facesContext, uiComponent);
> >     }
> >
> >     private void fakeSubmittedValue(FacesContext context, UIComponent 
> > component)
> >     {
> >         if (component instanceof UIInput)
> >         {
> >             UIInput input = (UIInput) component;
> >
> >             // set initial to the value-property
> >             if (input.getSubmittedValue() == null)
> >             {
> >                 Converter converter = input.getConverter();
> >                 Object value = input.getValue();
> >                 if (converter == null && value != null)
> >                 {
> >
> >                     try
> >                     {
> >                         converter = 
> > context.getApplication().createConverter(
> >                                 value.getClass());
> >                     } catch (FacesException e)
> >                     {
> >                         context.getExternalContext().log(
> >                                 "No converter for class "
> >                                         + value.getClass().getName()
> >                                         + " found (component id="
> >                                         + component.getId() + ").", e);
> >                     }
> >                 }
> >
> >                 if (converter == null)
> >                 {
> >                     if (value != null)
> >                     {
> >                         if (value instanceof String)
> >                         {
> >                             input.setSubmittedValue(value);
> >                         }
> >                         else
> >                         {
> >                             input.setSubmittedValue(value.toString());
> >                         }
> >                     }
> >                     else
> >                     {
> >                         // the value-property was null, init with an empty
> >                         // string by default
> >                         input.setSubmittedValue("");
> >                     }
> >                 }
> >                 else
> >                 {
> >                     Object convertedValue = converter.getAsString(context, 
> > component, value);
> >                     input.setSubmittedValue(convertedValue);
> >                 }
> >             }
> >         }
> >
> >         // process children
> >         Iterator children = component.getChildren().iterator();
> >         while (children.hasNext())
> >         {
> >             Object object = children.next();
> >             UIComponent child = (UIComponent) object;
> >             fakeSubmittedValue(context, child);
> >         }
> >     }
> > }
> >
> > > TabbedPane : wrong validation behavior
> > > --------------------------------------
> > >
> > >          Key: MYFACES-214
> > >          URL: http://issues.apache.org/jira/browse/MYFACES-214
> > >      Project: MyFaces
> > >         Type: Bug
> > >     Versions: 1.0.9 beta
> > >  Environment: MyFaces 1.0.9rc3, Tomcat 5.0.27, j2sdk1.5.0_01
> > >     Reporter: Philipp Ahlner
> >
> > >
> > > Requirements for reproduction:
> > > - min. two tabs with min. one required Input-Fields
> > > - a submit button on each tab
> > > - an "<h:messages styleClass="errors" showDetail="true" 
> > > showSummary="true"/>"-tag to see all validation errors regardless which 
> > > tab is selected
> > > Expected behavior:
> > > - if the submit button is pressed, !both! fields should be validated 
> > > regardless which tab is selected
> > > Steps to reproduce:
> > > 1. start a new session
> > > 2. let the required text fields empty
> > > 3. press the submit button in the first tab.
> > > Behavior:
> > > Only the field(s) on the first tab is validated.
> > > The interesting effect:
> > > Select the second tab and press submit. The validation errors on !both! 
> > > tab occours. If the tab was
> > > activated at least one time in a new session, all fields were validated 
> > > correctly.
> > > Further informations: 
> > > http://www.mail-archive.com/users%40myfaces.apache.org/msg03525.html
> >
> > --
> > This message is automatically generated by JIRA.
> > -
> > If you think it was sent incorrectly contact one of the administrators:
> >    http://issues.apache.org/jira/secure/Administrators.jspa
> > -
> > For more information on JIRA, see:
> >    http://www.atlassian.com/software/jira
> >
> >
>

Reply via email to