【问题标题】:How to skip validation for ajax call?如何跳过 ajax 调用的验证?
【发布时间】:2013-02-09 18:40:43
【问题描述】:

我有一个 h:inputText、h:selectonemenu 和 commandbutton。 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"/>

【问题讨论】:

  • 您似乎没有将 &lt;h:inputText&gt; 值绑定到您的 controller 属性(或者这可能是一个错字。
  • 正如 Luiggi Mendoza 所说,尝试将您的 h:inputText 绑定到托管 bean 的属性。 Appart 从那开始,它应该有一个值。你能告诉我们你的支持 bean 代码吗?
  • @LuiggiMendoza 这是一个示例代码。如果我将绑定我的 h:inputText 问题仍然存在。它将空值传递给控制器​​。

标签: ajax validation jsf primefaces selectonemenu


【解决方案1】:

当您将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));
        }
    } 

【讨论】:

  • 非常感谢您的回答,也感谢您解释问题。 :)
猜你喜欢
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
相关资源
最近更新 更多