Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 如何在更改h:selectOneMenu时加载和显示相关的h:selectOneMenu_Jsf_Jsf 2_Selectonemenu - Fatal编程技术网

Jsf 如何在更改h:selectOneMenu时加载和显示相关的h:selectOneMenu

Jsf 如何在更改h:selectOneMenu时加载和显示相关的h:selectOneMenu,jsf,jsf-2,selectonemenu,Jsf,Jsf 2,Selectonemenu,我想创建JSF注册表单,它有一个包含所有国家列表的选择菜单。我知道这很容易用Java HashMap实现,但我不知道如何实现的棘手部分是,在用户从列表中选择他的国家之后,第二个选择菜单将显示他的国家的城市?有什么有用的例子吗 最美好的祝愿。你可以用这个。当嵌套在输入组件(如)中时,默认情况下,在更改输入值时将调用该组件。可以指定一个侦听器方法,该方法可以基于当前输入值预填充下一个组件的数据,并且可以在渲染中指定下一个组件的客户端ID,以显示预填充的数据 bean必须至少在视图作用域not req

我想创建JSF注册表单,它有一个包含所有国家列表的选择菜单。我知道这很容易用Java HashMap实现,但我不知道如何实现的棘手部分是,在用户从列表中选择他的国家之后,第二个选择菜单将显示他的国家的城市?有什么有用的例子吗

最美好的祝愿。

你可以用这个。当嵌套在输入组件(如)中时,默认情况下,在更改输入值时将调用该组件。可以指定一个侦听器方法,该方法可以基于当前输入值预填充下一个组件的数据,并且可以在渲染中指定下一个组件的客户端ID,以显示预填充的数据

bean必须至少在视图作用域not request中:

@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);
    }

    // ...
}
当然,您也可以使用地图而不是列表。贴图键成为选项标签,贴图值成为选项值。您只需要记住,HashMap本质上是无序的。您更喜欢使用LinkedHashMap,而不是按映射插入顺序显示项目

另见:
+1对于@BalusC,答案非常清楚,解释得更深刻如果我有100个用户访问同一个页面,那么我创建100个不同的对象是在浪费内存!是否有一种优化方法,以便我们可以在应用程序级别使用该对象。@09Q71AO534:只需将应用程序范围内的数据(如{bean.countries})放入应用程序范围内的bean中,并为城市使用JPA二级缓存。@BalusC您知道我需要为private LocationService插入哪个Java包吗@彼得:这只是你自己的服务课。名字就像Bean@BalusC是否可以在不实际提交和设置第一个下拉列表的情况下更改第二个下拉列表?通过使用execute=@none。如果我的表单在一个可以关闭/取消的弹出窗口中,我不希望在使用save submit按钮之前对第一个ajax下拉列表进行任何更改。