Отправка параметров JSF в Richfaces a4j: повтор - PullRequest
0 голосов
/ 23 октября 2009

Я пытаюсь поместить несколько выпадающих меню в a4j: повтор. Значения для второго раскрывающегося списка зависят от значения, выбранного в первом. Ниже приведен код, который я пытаюсь использовать, но он передает пустой параметр:

<a4j:repeat id="localRepeat" var="local" value="#{InstanceController.instance.locations}" rowKeyVar="row">
                    <h:panelGrid columns="2">
                        <h:outputLabel value="Theater:" />
                        <h:selectOneMenu  id="theater" converter="#{TheaterConverter}" value="#{local.theater}">
                            <f:selectItems id="theaters" value="#{InstanceController.allTheaters}" />
                            <a4j:support event="onchange" action="#{InstanceController.getAllCountriesInTheater}" reRender="country" >
                                <f:param name="theater" value="#{local.theater.id}"/>
                            </a4j:support>
                        </h:selectOneMenu>

                        <h:outputLabel value="Country:" />
                        <h:selectOneMenu immediate="true" id="country" converter="#{CountryConverter}" value="#{local.country}">
                            <f:selectItems  value="#{InstanceController.allCountriesInTheater}" />
                            <a4j:support event="onchange" reRender="state" />
                        </h:selectOneMenu>

                    </h:panelGrid>
                    <rich:spacer height="10px" />
                </a4j:repeat>

Если я изменю параметр f: для отправки «1» вместо «# {local.theater.id}», он будет работать как положено

Есть ли способ получить выбранное значение первого раскрывающегося списка и отправить его в качестве параметра?

1 Ответ

2 голосов
/ 06 ноября 2009

Эта причина, по которой это не работает, заключается в том, что при отображении тега f: param текущее значение local.theater.id уже присвоено параметру. Таким образом, параметр театра будет содержать идентификатор театра, который был выбран при визуализации страницы - вероятно, нулевой, поскольку театр еще не выбран.

То, что вы пытаетесь сделать, гораздо проще: Просто удалите f: param и используйте свойство напрямую. Когда тег a4j: support срабатывает из-за изменения значения selectbox, jsf проверит ваши теги формы и назначит соответствующие значения модели. Таким образом, когда действие getAllCountriesInTheater будет выполнено, свойство local.theater уже будет содержать выбранный театр.

В зависимости от того, как спроектированы ваши компоненты поддержки, вам, вероятно, понадобится параметр для определения местоположения, для которого была изменена коробка выбора, поэтому действие getAllCountriesInTheater будет знать, в каком из мест искать выбранный театр.

...