0

我有一个 h:inputText、h:selectonemenu 和命令按钮。Inputtext 是必填字段,我已将其定义为 immediate="true"。然后,当我单击按钮时,我想将 selectonemenu 的当前值传递给托管 bean。但它的passig为空。如何管理此验证,以便它允许我在托管 bean 中获取 selectOneMenu 的值。

我的代码是..

<h:inputText id="inputSome" required="true" requiredMessage="Pls enter something"/>
        <h:message for="inputSome"></h:message>
        <h:selectOneMenu id="recepients" value="#{controller.selected}" immediate="true">
            <f:selectItem itemLabel="Select" itemValue=""/>
            <f:selectItems value="#{controller.tempNameList1}"></f:selectItems>


        </h:selectOneMenu>

        <p:commandButton value="Add" action="#{controller.submit}"
            immediate="true"/>
4

1 回答 1

5

当您放入immediate=truecommandButton 时,Invoke Application直接执行阶段,跳过(包括)验证之后的阶段。因此“应用模型值”阶段也被跳过,托管 bean 的属性保持未初始化。这会导致您为 的值传递 null selectOneMenu。解决方案是,您必须手动selected检索控制器的属性值,如下所示:

 Map<String, String> paramMap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

    for (String key : paramMap.keySet()) {
        if (key.contains("recepients")) {
            selected = Integer.parseInt(paramMap.get(key));
        }
    } 
于 2013-02-24T19:14:58.217 回答