【发布时间】:2013-07-10 21:14:16
【问题描述】:
我有一个延迟加载的<p:dataTable>。在其中的两列中,每一列都有一个<p:selectOneMenu>。
第一列包含国家列表,第二列包含数据库中的州列表。
我希望第二个菜单(包含州列表的菜单)仅显示数据表的每一行中与中第一个菜单中的国家相对应的那些州数据表的每一行。
在编辑模式期间,当其菜单中的国家/地区发生更改时,对应于该国家/地区的州应填充到其当前行的菜单中。
如何在数据表的每一行中加载与其国家相对应的州列表?
数据表中的这两列不完整,因为我不知道如何实现这一点。
<p:column>
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{row.state.country.countryName}"/>
</f:facet>
<f:facet name="input">
<p:selectOneMenu value="#{row.state.country}">
<f:selectItems var="country"
value="#{cityBean.selectedCountries}"
itemLabel="#{country.countryName}"
itemValue="#{country}"/>
<p:ajax update="states" listener="#{cityBean.getStates}"/>
</p:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
<p:column>
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{row.state.stateName}"/>
</f:facet>
<f:facet name="input">
<p:selectOneMenu id="states">
<f:selectItems var="state"
value="#{cityBean.selectedStates}"
itemLabel="#{state.stateName}"
itemValue="#{state}"/>
</p:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
cityBean.selectedCountries 检索所有必要的国家,但cityBean.selectedStates 还从数据库中检索所有不必要的州,应修改为仅检索与另一个菜单中的国家相对应的那些州。
我该如何从这里开始?
【问题讨论】:
-
这里是您利用辅助课程的地方。您的
countryId不是直接位于您的托管 bean 中,而是位于您的辅助类中(请记住,您用于构建表的列表是由这些辅助工具组成的)。然后你有 ajax 事件侦听器(这个在 MB 中),它将接收已更改的行。 MB 只获取已更改的辅助对象(其countryId)并加载其更新的状态列表,该列表进入辅助对象。
标签: jsf primefaces jsf-2.2 selectonemenu