I faced a similar problem when using conditionally rendered panes. The best
solution I found was to render them all with JSP but use javascript to hide
the unused panes. Works like a charm and is actually better as I can switch
the rendered pane without requiring a round-trip to the server.

-----Original Message-----
From: Bruno Aranda [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, June 13, 2006 5:52 PM
To: MyFaces Discussion
Subject: Re: Conditionally rendered fields not retaing values

I have two choices in my mind now. One is more elegant than the other, which
is a hack actually. The more elegant is to use the sandbox s:subForm
component [1]. I haven't used it myself so I cannot be or more help. The
hack is to click with javascript an invisible button with the immediate that
sends the form, something like this:

<h:selectOneRadio ...
onclick="document.getElementById('hiddenButton').click()"
            immediate="true"
            valueChangeListener="#{ServiceBean.hardwareTypeChanged}">
                ...
</h:selectOneRadio>

<t:commandButton style="visibility:hidden" immediate="true"
action="nothing"/>

Note that both the selectOne and the button are immediate="true". It is an
ugly hack, so the subform option is a better approach...

Bruno

[1] http://myfaces.apache.org/sandbox/subForm.html

On 6/13/06, Meghana <[EMAIL PROTECTED]> wrote:
> Bruno,
>  Thanks a lot! That was it. One side effect though. It seems to 
> validate and show the error messages for the required fields and 
> others. Any idea how to circumvent that?
> -M
>
>
>
> Bruno Aranda <[EMAIL PROTECTED]> wrote:
>
>  Does it work if you remove the immediate="true" attribute from the 
> selectOneRadio (see this docs to see if you really need it [1]), and 
> remove the facesContext.renderResponse() line (not needed).
>
> Let's see!
>
> Bruno
>
> [1]
> http://wiki.apache.org/myfaces/How_The_Immediate_Attribute_Works
>
> On 6/13/06, Meghana wrote:
> > I am sorry I should have included my code snippet before itself.
> > Here we go!
> >
> >
> >
> > onclick="submit()" immediate="true"
> > valueChangeListener="#{ServiceBean.hardwareTypeChanged}">
> >
> >
> >
> > public void hardwareTypeChanged(ValueChangeEvent event) throws 
> > SQLException, Exception{ FacesContext context = 
> > FacesContext.getCurrentInstance();
> > String prevCategorySelected = (String)event.getOldValue(); String 
> > newCategorySelected = (String)event.getNewValue();
> >
> >
> if(!newCategorySelected.equalsIgnoreCase(prevCategorySelected)){
> > // Value changed. Change the drop down values.
> > if(newCategorySelected.equals("Desktop")){
> > desktopSelected = true;
> > debug("Setting desktopSelected field to:
> > "+isDesktopSelected());
> > }
> > else if(newCategorySelected.equals("Laptop")){
> > laptopSelected = true;
> > debug("Setting laptopSelected field to:
> > "+isLaptopSelected()+" Laptop Type: "+laptopType); } 
> > context.renderResponse(); } } }
> >
> > Based on what hardware type is selected Desktop items/laptop items 
> > are displayed.
> > The code for that is
> >
> > rendered="#{ServiceBean.desktopSelected}"/>
> >
> >
> > id="desktop_type">
> >
> > itemLabel="Standard User Desktop" />
> >
> > itemLabel="Non User Desktop" />
> >
> >
> >
> >
> > rendered="#{ServiceBean.laptopSelected}"/>
> >
> >
> > id="laptop_type">
> >
> > itemLabel="Standard User Laptop" />
> >
> > itemLabel="Power User Laptop" />
> >
> >
> >
> >
> > rendered="#{ServiceBean.laptopSelected}"/>
> >
> >
> > id="docking_station">
> >
> >
> >
> >
> >
> >
> > rendered="#{ServiceBean.laptopSelected}"/>
> >
> >
> > id="wireless_access">
>
> >
> >
> >
> >
> >
> >
> >
> >
> > Bruno Aranda wrote:
> >
> > And what about the "immediate" attributes? Are you using them? Can 
> > you show an snippet of your code?
> >
> > Bruno
> >
> > On 6/13/06, Meghana wrote:
> > > Its already in session scope :-(
> > >
> > >
> > > Bruno Aranda wrote:
> > >
> > > Could you try if that works if your bean is in session scope?
> > >
> > > Bruno
> > >
> > > On 6/13/06, Meghana wrote:
> > > > Hi,
> > > > I have a form in which the displayed input fields change based 
> > > > on a
> > radio
> > > > button field. When ever the field value is changed a 
> > > > corresponding valuechangelistener method is called and then the 
> > > > new set of input
> > fields
> > > > are displayed. But the values entered for those conditionally 
> > > > rendered fields are not retaining values in the backing bean. 
> > > > They are all
> null.
> > > I've
> > > > been banging my head over this for quite a while.
> > > > Any ideas please!
> > > >
> > > > Thanks a lot,
> > > > -M
> > > >
> > > >
> > > > __________________________________________________
> > > > 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
> >
> >
> >
> >
> > __________________________________________________
> > 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