我已经通过验证工具获得了自动填充功能 - 如果我提交的问题是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;还没有设置对象,但正如预期的那样,它不是。
我能做些什么才能获得所选择的值而不是提交的值?
由于
答案 0 :(得分:1)
AUTOCOMPLETE验证器功能(根据Primefaces文档) - 一个方法表达式,引用验证输入的方法。
您传入“Validator”的对象验证插入的值而不是选定的值,因为此函数在每个代码提供的任何其他函数之前完成。
我宁愿建议您将要应用于'AAA001'的逻辑移动到'BEAN.onSelect'侦听器,因为这适用于选择为插入值对象的值对象(应该相应地设置事件。)
我希望这可以帮助您解决问题。祝你好运!
答案 1 :(得分:0)
我有同样的问题,我通过简单地从更新区域中排除自动完成来解决它。 因此,如果您想在没有自动完成部分的情况下更新整个表单,请按以下步骤操作: How to exclude child component in ajax update of a parent component?