Another problem: what if initially several components on several pages are invalid - now you can never change to another tab with your approach, as the validation prevents the navigation to get through?
regards, Martin On 5/21/05, Philipp Ahlner <[EMAIL PROTECTED]> wrote: > Hi Jon! > > I think there are two main strategies with the tabbed-panes. Either > all components > are treated together regardless on which tab they are shown (like > mine), or they are treated tab by tab (like yours). Your idea to > handle this problem in a listener is a very good one. > > Regards, > Philipp > > 2005/5/21, Jon Travis <[EMAIL PROTECTED]>: > > Philipp, > > > > As a workaround for what I believe is the same problem, we > > are listening on tab change events and setting all the > > vales & submitted values of all the contained components to > > null. We have that luxury because each panel is > > self-contained (i.e. any changes inside a tab are lost if > > the tab is changed without clicking save) > > > > -- Jon > > > > > > On May 20, 2005, at 4:06 AM, Philipp Ahlner wrote: > > > > > 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- > > >> [EMAIL PROTECTED]> 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 > > >>> > > >>> > > >>> > > >> > > >> > > > > > > > > > > > > > >