【问题标题】:how can I relate two selectManyListbox?如何关联两个 selectManyListbox?
【发布时间】:2011-07-18 09:38:19
【问题描述】:
我正在使用 JSF2.0/primefaces,我有两个 selectManyListbox
<h:selectManyListbox value="#{ToolsJIRA.selectedProjects}" size="3">
<f:selectItems value="#{ToolsJIRA.getMyListProject()}" />
</h:selectManyListbox>
<h:selectManyListbox value="#{TestAjax.selectedstatus}" size="3">
<f:selectItems value="#{TestAjax.StepsByProject()}" />
</h:selectManyListbox>
第二个 selectManyListbox 与第一个 selectManyListbox 相关(当用户从第一个选择选项时,第二个将被填充),
我该如何关联它们?
【问题讨论】:
标签:
java
jsf-2
primefaces
【解决方案1】:
使用<f:ajax>。
<h:selectManyListbox value="#{bean.selectedProjects}" size="3">
<f:selectItems value="#{bean.availableProjects}" />
<f:ajax listener="#{bean.updateAvailableSteps}" render="steps" />
</h:selectManyListbox>
<h:selectManyListbox id="steps" value="#{bean.selectedSteps}" size="3">
<f:selectItems value="#{bean.availableSteps}" />
</h:selectManyListbox>
类似的东西
public void updateAvailableSteps() {
availableSteps = new ArrayList<Step>();
for (Project selectedProject : selectedProjects) {
availableSteps.addAll(selectedProject.getSteps());
}
// If you want to filter duplicates, add the following line as well:
// availableSteps = new ArrayList<Step>(new LinkedHashSet<Step>(availableSteps));
}
在输入组件中,<f:ajax> 默认在每个 change 事件上触发。触发时,listener 属性中声明的 bean 方法将被调用,render 属性中定义的组件将被更新。