如何跳过ajax调用的验证?

时间:2013-02-24 15:12:01

标签: ajax validation jsf primefaces selectonemenu

我有一个h:inputText,h:selectonemenu和commandbuton。 Inputtext是必填字段,我将其定义为immediate =“true”。然后,当我单击按钮时,我想将selectonemenu的当前值传递给托管bean。但它的passig null。如何管理此验证,以便我可以在托管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"/>

1 个答案:

答案 0 :(得分:5)

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

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

    for (String key : paramMap.keySet()) {
        if (key.contains("recepients")) {
            selected = Integer.parseInt(paramMap.get(key));
        }
    }