显示多个p:selectonemenu inside ui:基于上一个菜单的选定值重复



我想根据以前的 <f:selectItems>的选定值在 <ui:repeat>中显示多个 <p:selectOneMenu>组件,直到到达树的叶子。

例如。<p:selectOneMenu>中的第一个国家/地区。现在我选择一个国家说巴基斯坦。现在,在<ui:repeat>中,将有第二个<p:selectOneMenu>组件,其中包括巴基斯坦城市。现在,我选择一个城市,然后应该有第三个<p:selectOneMenu>带有城市扇区,依此类推,直到从数据库中找不到记录。

我该如何实现?

<ui:repeat>对此非常有用。首先,DB中没有无限数量的表。只需根据DB表中的可用选择项目有条件地渲染后代下拉列表。

<p:selectOneMenu value="#{bean.country}">
    <f:selectItem itemValue="#{null}" itemLabel="--select country--" />
    <f:selectItems value="#{bean.countries}" />
    <p:ajax listener="#{bean.changeCountry}" update="cities" />
</p:selectOneMenu>
<h:panelGroup id="cities">
    <p:selectOneMenu value="#{bean.city}" rendered="#{not empty bean.cities}">
        <f:selectItem itemValue="#{null}" itemLabel="--select city--" />
        <f:selectItems value="#{bean.cities}" />
        <p:ajax listener="#{bean.changeCity}" update="sectors" />
    </p:selectOneMenu>
</h:panelGroup>
<h:panelGroup id="sectors">
    <p:selectOneMenu value="#{bean.sector}" rendered="#{not empty bean.sectors}">
        <f:selectItem itemValue="#{null}" itemLabel="--select sector--" />
        <f:selectItems value="#{bean.sectors}" />
    </p:selectOneMenu>
</h:panelGroup>

@ViewScoped bean中使用这样的东西:

private List<String> countries;
private String country;
private List<String> cities;
private String city;
private List<String> sectors;
private String sector;
@EJB
private LocationService locationService;
@PostConstruct
public void init() {
    countries = locationService.getCountries();
}
public void changeCountry() {
    cities = locationService.getCities(country);
    city = null;
    sectors = null;
}
public void changeCity() {
    sectors = locationService.getSectors(city);
    sector = null;
}

当然,您还可以使用Country,也可以使用CC_11,CitySector实体以及(通用)转换器。

另请参见:

  • 如何从数据库中填充h:selectonemenu的选项?
  • 我们的selectOneMenu Wiki Page

相关内容

  • 没有找到相关文章

最新更新