Primefaces AutoComplete验证器验证错误的值

时间:2016-04-22 07:56:33

标签: jsf primefaces autocomplete

我已经通过验证工具获得了自动填充功能 - 如果我提交的问题是AAA'到自动填充,然后我得到一个以' AAA'开头的建议列表。我选择了AAA001',然后调用验证器,但在验证器中,值为“AAA”#39;当我期待' AAA001'。

这是我的代码:

<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;
    ...
}

立即代码=&#39; AAA&#39;而不是预期的AAA001&#39;。我添加了object属性只是为了确保&#39; AAA001&#39;还没有设置对象,但正如预期的那样,它不是。

我能做些什么才能获得所选择的值而不是提交的值?

由于

2 个答案:

答案 0 :(得分:1)

  

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

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

IMAGE - A quick drawing explaining the validator's purpose

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

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

答案 1 :(得分:0)

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