首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在h:selectOneMenu更改时加载和显示依赖h:selectOneMenu

如何在h:selectOneMenu更改时加载和显示依赖h:selectOneMenu
EN

Stack Overflow用户
提问于 2018-06-20 07:11:32
回答 1查看 0关注 0票数 0

我想要创建JSF注册表格,其中有选择菜单与所有国家的名单。我知道这很容易用Java实现HashMap但是,我不知道如何实现的棘手部分是,当用户从列表中选择他的国家之后,第二个选择菜单就会出现在他所在国家的城市中?有什么有用的例子吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-20 16:16:43

你可以用<f:ajax>为了这个。当嵌套在输入组件中时,例如<h:selectOneMenu>,则在更改输入值时,默认情况下将调用它。可以指定listener方法,该方法可以根据当前输入值预先填充下一个组件的数据,并且可以在render以显示预先填充的数据。

代码语言:txt
复制
<h:selectOneMenu value="#{bean.country}">
    <f:selectItems value="#{bean.countries}" />
    <f:ajax listener="#{bean.changeCountry}" render="cities" />
</h:selectOneMenu>
<h:panelGroup id="cities">
    <h:selectOneMenu value="#{bean.city}" rendered="#{not empty bean.cities}">
        <f:selectItems value="#{bean.cities}" />
    </h:selectOneMenu>
</h:panelGroup>

bean至少必须位于视图范围(而不是请求):

代码语言:txt
复制
@ManagedBean
@ViewScoped
public class Bean implements Serializable {

    private String country; // +getter+setter
    private String city; // +getter+setter
    private List<String> countries; // +getter
    private List<String> cities; // +getter

    @EJB
    private LocationService locationService;

    @PostConstruct
    public void init() {
        countries = locationService.getCountries();
    }

    public void changeCountry() {
        cities = locationService.getCities(country);
    }

    // ...
}

当然,也可以使用Map<String, String>而不是List<String>。映射键成为选项标签,映射值成为选项值。你只需要记住HashMap本质上是无序的。你宁愿用LinkedHashMap而不是显示Map插入顺序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100005449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档