我想要创建JSF注册表格,其中有选择菜单与所有国家的名单。我知道这很容易用Java实现HashMap
但是,我不知道如何实现的棘手部分是,当用户从列表中选择他的国家之后,第二个选择菜单就会出现在他所在国家的城市中?有什么有用的例子吗?
发布于 2018-06-20 16:16:43
你可以用<f:ajax>
为了这个。当嵌套在输入组件中时,例如<h:selectOneMenu>
,则在更改输入值时,默认情况下将调用它。可以指定listener
方法,该方法可以根据当前输入值预先填充下一个组件的数据,并且可以在render
以显示预先填充的数据。
<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至少必须位于视图范围(而不是请求):
@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
插入顺序。
https://stackoverflow.com/questions/-100005449
复制相似问题