У меня есть 3 rich: выберите элементы управления с идентификатором select1, select2, select3.Я хочу нажать на select1, будет отображен элемент управления «select2», и когда я нажму на элемент управления select2, будет отображен select3, как это.Я сделал свое приложение на NetBeans 7.0.1 и использую фреймворк jsf 2.0 и richFaces 4.2.0.
Мое решение состоит в том, чтобы создать два a4j: ajax с идентификаторами ajax1 и ajax2, чтобы назначить рендеринг для select2 и select3 на основе событий select1 и select2 selectItem.Я расположил ajax1 и ajax2 в очереди с идентификатором queue1.
Вот код страницы:
<h:form>
<a4j:queue name="queue1" onerror="window.alert('alert in queue');" onrequestdequeue="window.alert('queue1 dequeue');" onrequestqueue="window.alert('queue1 enqueue');" requestDelay="1000" ignoreDupResponses="true"/>
<h3 style="text-align: center">Test case 1: 3 selection controls problem</h3>
<br/><br/>
<h:outputLink value="../index.xhtml">View Index </h:outputLink>
<br/><br/>
Problem: <h:outputText escape="false" value="#{carBean.testDescription}"/>
<br/><br/>
<table>
<tr>
<td>Car Firm (selection1)</td>
<td>Car type (selection2)</td>
<td>Production (selection3)</td>
</tr>
<tr>
<td>
<rich:select id="select1" value="#{carBean.companyName}" maxListHeight="100" enableManualInput="true" defaultLabel="Type here">
<a4j:ajax id="ajax1" queueId="queue1" execute="@form" render="select2, errorText" event="selectitem" listener="#{carBean.changeCompanyEvent()}">
</a4j:ajax>
<f:selectItems value="#{carBean.lstCompany}"></f:selectItems>
</rich:select>
</td>
<td>
<rich:select id="select2" value="#{carBean.typeName}" maxListHeight="100" enableManualInput="true" defaultLabel="Type here" >
<a4j:ajax id="ajax2" queueId="queue1" immediate="true" execute="@form" render="select3, errorText" event="selectitem" listener="#{carBean.changeCarTypeEvent()}">
</a4j:ajax>
<f:selectItems value="#{carBean.lstCarType}"></f:selectItems>
</rich:select>
</td>
<td>
<rich:select id="select3" value="#{carBean.productionName}"
maxListHeight="100" enableManualInput="true" defaultLabel="Type here" >
<f:selectItems value="#{carBean.lstCarProduction}"></f:selectItems>
</rich:select>
</td>
</tr>
</table>
<br/><br/>
<h:outputText id="errorText" escape="false" value="#{carBean.alertError}"/>
</h:form>
Возникли проблемы: у меня 2 проблемычто я до сих пор не нашел причины:
- select2 должен установить немедленный = true, иначе событие, определенное в ajax2, не будет выполнено.
Я не знаючто вызвало это.
- Когда я установил немедленный = true для select2, было вызвано событие ajax2.Но переменная typeName, которая назначена в качестве значения элемента управления select2, все еще не имеет присвоенного значения, поэтому select3 еще не присвоено значение.
Вот изображения ошибок: http://i970.photobucket.com/albums/ae190/swenteiger7/richFaces%20error-%20110312/testcase1Error.png
Приложение : Я также отправил свой проект приложения (открытый с помощью IDE Net Beans), чтобы ответить на этот вопрос.Вы можете сконцентрироваться на 3 элементах: - файлface-config.xml в папке Web / Web-INF, в котором определен управляемый компонент CarBean; - папка testcase1 в веб-папке (в которой есть threeSelectExample.xhtml).- Пакет bean и пакет утилит для сохранения управляемого компонента (в testcase1 мы применяем его в управляемом компоненте CarBean).
Вы можете скачать мой архивный проект в моем прикрепленном файле.Пожалуйста, добавьте JSF2.0 и среду richFaces для запуска приложения (https://community.jboss.org/wiki/HowToAddRichFaces4xToProjectsNotBasedOnMaven)
Вот мое приложение: http://www.mediafire.com/?fnab3824b8vwd93
Если у вас возникли проблемы с загрузкой, свяжитесь со мной. Спасибо.