The solution can be found here:
http://forum.java.sun.com/thread.jspa?messageID=4027008

Mike

--- Mike Duffy <[EMAIL PROTECTED]> wrote:

> What I am looking for is a way to automatically propagate a change from one 
> drop down list to
> another without having to submit the form.
> 
> This can be easily done in a pure Java Script approach using an onClick 
> function.  However, this
> approach breaks in JSF.
> 
> As a very simple example, if dropdown "A" contains values for years, and drop 
> down "B" contains
> values for car models in a given year, you can use JavaScript to change 
> dropdown "B" when a user
> makes a selection from dropdown "A".  You do not set up any options in your 
> JSP in dropdown "B";
> the options are contained in the function and the browser puts the right 
> options in the DOM when
> the function is selected.
> 
> The change actually works in the browser for a JSF page; however, when the 
> form is submitted an
> error is generated: "formName:carModel invalid value".
> 
> It seems like JSF might be doing a validation against the possible options in 
> the dropdown list
> to
> insure the the option value is valid when compared to that list; because no 
> options are found,
> an
> error is generated.  If this is the case, there are many JavaScript 
> techniques that will not be
> valid in JSF.
> 
> Any suggestions or insights would be greatly appreciated.
> 
> Mike
> 
> 
> 
> --- [EMAIL PROTECTED] wrote:
> 
> > Hi!
> > 
> > No the form is submitted (because a ValueChangeListener needs this)
> > 
> > With the following I display the same page again, but this time with the 
> > new items in the
> second
> > selectbox:
> > 
> > if (event.getComponent().getId()
> > >                           .equalsIgnoreCase("newpartnerMandanten")) {
> > >                   String viewId = "/newpartner.jsp";
> > >                   FacesContext context = 
> > > FacesContext.getCurrentInstance();
> > >                   UIViewRoot view = 
> > > context.getApplication().getViewHandler()
> > >                                   .createView(context, viewId);
> > >                   view.setViewId(viewId);
> > >                   context.setViewRoot(view);
> > >                   context.renderResponse();
> > 
> > 
> > -----Ursprüngliche Nachricht-----
> > Von: Mike Duffy [mailto:[EMAIL PROTECTED]
> > Gesendet: Mittwoch, 14. Dezember 2005 19:34
> > An: MyFaces Discussion
> > Betreff: Re: AW: Dynamic Drop Down Lists
> > 
> > 
> > Thx Andreas.
> > 
> > When you make a change in the first select box, does the change 
> > automatically propogate to
> > second
> > selectbox without submitting the form (or does the change just affect the 
> > component tree)?
> > 
> > Mike
> > 
> > --- [EMAIL PROTECTED] wrote:
> > 
> > > HI Mike!
> > > 
> > > I have done it with a ValueChangeListener, it works fine.
> > > I get my Values for the BOX from the Database, because I have to update 
> > > them very quickly.
> So
> > > I'm not sure, if you will do that yourself.
> > > 
> > > Here is my code, perhaps it helps you:
> > > 
> > > 
> > > <!--FIRST SELECTBOX-->
> > > <h:selectOneMenu  id="mandanten" styleClass="show"
> > >   value="#{searchDto.mandant}" 
> > > valueChangeListener="#{linker.listnewStandortsForSearch}"
> > >   onchange="submit()"  rendered="#{searchDto.showAlleAnzeigenMandant}" >
> > >   <f:selectItem itemValue="#{searchDto.nullwert}" itemLabel="#{msg.alle}" 
> > >  />
> > >   <f:selectItems value="#{queryHelper.mandanten}"/>
> > > </h:selectOneMenu>
> > > 
> > > <!--SECOND SELECTBOX: DEPENDS ON FIRST SELECTBOX-->
> > > <h:selectOneMenu id="standorte" styleClass="show"
> > >   value="#{searchDto.standort}" 
> > > rendered="#{searchDto.showAlleAnzeigenStandort}">
> > >   <f:selectItem itemValue="#{searchDto.nullwert}" itemLabel="#{msg.alle}" 
> > > />
> > >   <f:selectItems value="#{queryHelper.standorte}"/>
> > > </h:selectOneMenu>
> > > 
> > > //HERE IS THE VALUECHANGEMETHOD:
> > > 
> > > public void listnewStandortsForSearch(ValueChangeEvent event) {
> > > 
> > >           qh = (QueryHelper) FacesUtil.getManagedBean("queryHelper");
> > >           searchDto = (SearchDto) FacesUtil.getManagedBean("searchDto");
> > >           Long newvalue = null;
> > > 
> > >           // Überprüfung ob Wert der Mandanten Combobox einen anderen 
> > > Wert als 0
> > >           // (=Alle Anzeigen) liefert
> > >           if (((Long) event.getNewValue()).compareTo(new Long(0)) != 0) {
> > >                   newvalue = (Long) event.getNewValue();
> > >                   searchDto.setMandant(newvalue);
> > > 
> > >           }
> > >           else {
> > >                   searchDto.setMandant(new Long(0));
> > >           }
> > > 
> > >           //CALL METHOD WHICH TAKES THE VALUES FOR THE 2nd BOX OUT OF THE 
> > > DATABASE, DEPENDING ON THE
> > > SELECTION OF THE FIRST BOX.
> > >           try {
> > >                   qh.liststandorts(newvalue);
> > >           }
> > >           catch (Exception e) {
> > >                   // TODO Auto-generated catch block
> > >                   e.printStackTrace();
> > >           }
> > > 
> > > 
> > > //NOT SO INTERESSTING FOR YOU:
> > >           if (event.getComponent().getId()
> > >                           .equalsIgnoreCase("newpartnerMandanten")) {
> > >                   String viewId = "/newpartner.jsp";
> > >                   FacesContext context = 
> > > FacesContext.getCurrentInstance();
> > >                   UIViewRoot view = 
> > > context.getApplication().getViewHandler()
> > >                                   .createView(context, viewId);
> > >                   view.setViewId(viewId);
> > >                   context.setViewRoot(view);
> > >                   context.renderResponse();
> > >           }
> > >           else {
> > >                   String viewId = "/search.jsp";
> > >                   FacesContext context = 
> > > FacesContext.getCurrentInstance();
> > >                   UIViewRoot view = 
> > > context.getApplication().getViewHandler()
> > >                                   .createView(context, viewId);
> > >                   view.setViewId(viewId);
> > >                   context.setViewRoot(view);
> > >                   context.renderResponse();
> > >           }
> > > 
> > >   }
> > > 
> > > -----Ursprüngliche Nachricht-----
> > > Von: Mike Duffy [mailto:[EMAIL PROTECTED]
> > > Gesendet: Mittwoch, 14. Dezember 2005 09:37
> > > An: [email protected]
> > > Betreff: Dynamic Drop Down Lists
> > > 
> > > 
> > > Is there any way to create dynamic drop down lists in JSF without using 
> > > AJAX?
> > > 
> > > Without JSF there are JavaScript techniques that can be used to 
> > > dynamically change a drop
> down
> > > list (e.g., based on the selection of drop down list A, the values ion 
> > > drop down list B are
> > > populated by an onclick function),
> > > 
> > > However, with JSF, the changes made in JavaScript do not correspond to 
> > > the values in the
> > > component
> > > tree on the server, so an error is thrown.  I've tried to update the 
> > > component through a
> > > "valueChangeListener", but this also generates an error.
> > > 
> > > Has anyone found a way to do this in JSF?  Can you send a link with an 
> > > example?  I Googled
> > with
> > > no
> > > success.
> > > 
> > > Thx.
> > > 
> > > Mike
> > > 
> > > __________________________________________________
> > > Do You Yahoo!?
> > > Tired of spam?  Yahoo! Mail has the best spam protection around 
> > > http://mail.yahoo.com 
> > > 
> > > 
> > > ______________________________________________________________________
> > > 
> > > This email and any files transmitted with it are confidential and
> > > intended solely for the use of the individual or entity to whom they
> > > are addressed. If you have received this email in error please notify
> > > your system manager.
> > > 
> > > This footnote also confirms that this email message has been swept
> > > for the presence of computer viruses.
> > > ______________________________________________________________________
> > > 
> > 
> > 
> > __________________________________________________
> > Do You Yahoo!?
> > Tired of spam?  Yahoo! Mail has the best spam protection around 
> > http://mail.yahoo.com 
> > 
> > 
> > ______________________________________________________________________
> > 
> > This email and any files transmitted with it are confidential and
> > intended solely for the use of the individual or entity to whom they
> > are addressed. If you have received this email in error please notify
> > your system manager.
> > 
> > This footnote also confirms that this email message has been swept
> > for the presence of computer viruses.
> > ______________________________________________________________________
> > 
> 
> 
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around 
> http://mail.yahoo.com 
> 


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

Reply via email to