【问题标题】:Primefaces AutoComplete validator is validating the wrong valuePrimefaces AutoComplete 验证器正在验证错误的值
【发布时间】:2016-08-15 17:57:20
【问题描述】:

我有一个带有验证器的自动完成功能 - 如果我向自动完成功能提交一个“AAA”查询,那么我会得到一个以“AAA”开头的建议列表。我选择了“AAA001”,然后调用了验证器,但在验证器中,当我预期为“AAA001”时,值是“AAA”。

这是我的代码:

<p:autoComplete id="codeAutoComplete"
   completeMethod="#{BEAN.autoCompleteCode}"
   minQueryLength="3" forceSelection="true"
   value="#{OBJECT.code}"
   validator="#{BEAN.validateCode}" >
   <f:attribute name="object" value="#{OBJECT}" />
   <p:ajax listener="#{BEAN.onCodeSelect}"
       update="form"/>
</p:autoComplete>

代码只是一个带有 getter 和 setter 以及我的验证器的字符串:

public void validateCode(FacesContext ctx, UIComponent component, Object value) {
    String code = (String) value;
    ...
}

立即编码 = 'AAA' 而不是预期的 'AAA001'。我添加了对象属性只是为了确保尚未在对象上设置“AAA001”,但正如预期的那样,它没有。

我可以做些什么来获取所选值而不是提交的值?

谢谢

【问题讨论】:

    标签: jsf primefaces autocomplete


    【解决方案1】:

    AUTOCOMPLETE 验证器功能(根据 Primefaces 文档) - 引用验证输入的方法的方法表达式。

    您传递给“验证器”的对象验证插入的值而不是选定的值,因为根据提供的代码,此函数在任何其他函数之前完成。

    我宁愿建议您将要应用于“AAA001”的逻辑移动到“BEAN.onSelect”侦听器,因为这适用于与插入的值对象相对的选择的值对象(应该事件被相应地设置)。

    我希望这可以帮助您解决问题。祝你好运!

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,我通过简单地从更新区域中排除自动完成来解决它。 因此,如果您想在没有自动完成部分的情况下更新整个表单,请执行以下操作: How to exclude child component in ajax update of a parent component?

      【讨论】:

        猜你喜欢
        • 2012-05-13
        • 2013-04-29
        • 2010-10-22
        • 2012-10-15
        • 2014-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多