Form value not passed to Seam bean after a4j reRender

Posted by Casper on Stack Overflow See other posts from Stack Overflow or by Casper
Published on 2010-05-11T11:39:42Z Indexed on 2010/05/11 11:44 UTC
Read the original article Hit count: 333

Filed under:
|
|
|

I'm making a webapp in Seam but ran into a problem I can't seem to fix.

I have a JSF form where the customer can select a reservation type through a combobox. Based on the selected value, other form components gets rendered.

For example: the customer selects Hours as reservation type, a panelGroup gets rendered where the customer can select a start- and an end hour. But if the customer would select 'part of the day' as reservation type, a selectOneMenu gets rendered where the customer can select a part of the day (morning, afternoon, evening)

The rerendering well but the values of the components with a rendered conditional won't get passed to the bean. They stay null values.

This is the code i'm talking about:

            <h:panelGrid columns="2">
                <h:outputText value="Reservation Type" />
                <h:selectOneMenu value="#{selectedPeriodPart}">
                    <s:selectItems
                        value="#{productManager.getAvailableDayPartsSpot()}"
                        var="daypart" label="#{daypart.label}"></s:selectItems>
                    <s:convertEnum />
                    <a4j:support ajaxSingle="true" event="onchange" action="#"
                        reRender="spot"></a4j:support>
                </h:selectOneMenu>

                <h:outputText id="date_spot" value="Date" />

                <a4j:outputPanel id="calendar_spot" layout="block">
                    <rich:calendar value="#{reservation.reservationPeriod.startDate}"
                        locale="en" cellWidth="24px" cellHeight="22px"
                        style="width:200px" />
                </a4j:outputPanel>

                <h:outputText rendered="#{selectedPeriodPart eq 'DAY_PART'}"
                    value="Daypart" />

                <h:selectOneMenu value="#{selectedDaypart}"
                    rendered="#{selectedPeriodPart eq 'DAY_PART'}">
                    <f:selectItem id="si_morning" itemLabel="Morning (6:00 - 12:00)"
                        itemValue="morning" />
                    <f:selectItem id="si_afternoon"
                        itemLabel="Afternoon (12:00 - 18:00)" itemValue="afternoon" />
                    <f:selectItem id="si_evening" itemLabel="Evening (18:00 - 00:00)"
                        itemValue="evening" />
                </h:selectOneMenu>

                <h:outputText rendered="#{selectedPeriodPart eq 'HOURS'}"
                    value="Hours" />

                <h:panelGroup id="hours_spot"
                    rendered="#{selectedPeriodPart eq 'HOURS'}">
                    <ui:include src="/includes/reservation/select_hours.xhtml" />
                </h:panelGroup>
            </h:panelGrid>
        </s:div></code>

Note: The calendar value do get passed back to the bean but the value of this piece of code doesn't (it does if you remove the rendered conditional):

© Stack Overflow or respective owner

Related posts about seam

Related posts about jsf