jsf - 如何加载和显示依赖 h :selectOneMenu on change of a h:selectOneMenu

标签 jsf jsf-2 selectonemenu

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

最好的祝愿。

最佳答案

您可以使用 <f:ajax>为了这。当嵌套在输入组件中时,例如 <h:selectOneMenu> , 那么它会在输入值改变时默认被调用。您可以指定一个 listener方法可以根据当前输入值预填充下一个组件的数据,您可以在 render 中指定下一个组件的客户端 ID。以显示预先填充的数据。

<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 必须至少在 View 范围内(不是请求):
@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 中的项目插入顺序。
也可以看看:
  • Our selectOneMenu wiki page
  • When to use valueChangeListener or f:ajax listener?
  • 关于jsf - 如何加载和显示依赖 h :selectOneMenu on change of a h:selectOneMenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11505248/

    相关文章:

    html - 如何为多个元素添加一个工具提示?

    带有 noSelectionOption 的 JSF SelectOneMenu 使用标签作为值?

    spring - 具有 Spring 安全性的 JSF - 登录后重定向到指定页面

    servlets - 如何进行从旧版 Servlet 到 JSF 2.0 的服务器端重定向?

    jsf-2 - 如何在三秒后自动关闭 PrimeFaces 对话框

    JSF selectOneMenu 正在刷新并返回到以前的状态,而不是显示新值

    jsf-2 - 使用f :selectItems var in passtrough attribute

    javax.faces.model.SelectItem 将值对象存储为字符串

    jsf - 在转换器中注入(inject) managedBean

    html - JSF 正确渲染 html 代码?