app以自动完成时设置的值开始。 当用键盘取消一些字母时,项目列表打开。 如果用键盘输入选择项目,则设置值。 如果用鼠标点击选择,则未设置值。 xhtml代码:
<h:form id="validateFormId">
<p:autoComplete id="fieldA" value="#{autocompleteController.name}"
completeMethod="#{autocompleteController.loadSuggestedValues}"
autoHighlight="false" dropdown="true">
<p:ajax event="change" process="@this" update="@form"
listener="#{autocompleteController.triggerElement('ac')}" />
<p:ajax event="itemSelect" process="@this" update="@form"
listener="#{autocompleteController.triggerElement('ai')}" />
</p:autoComplete>
</h:form>
豆:
@Named
@SessionScoped
public class AutocompleteController implements Serializable {
private static final long serialVersionUID = 1L;
private String name = "start";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void triggerElement(String event) {
System.out.println("trigger event: " + event);
System.out.println("value: " + name);
}
public List loadSuggestedValues(String query) {
List<String> values = new ArrayList<String>();
values.add("aaa");
values.add("bbb");
values.add("ccc");
values.add("ddd");
values.add("eee");
return values;
}
}
试验: 1)取消一个字母并用键盘选择项目(第一个别名aaa):
trigger event: ai
value: aaa
2)取消一个字母并用鼠标选择项目(第一个别名aaa):
trigger event: ac
value: aa
3)用鼠标单击下拉列表并用鼠标选择项目(第一个别名aaa):
trigger event: ai
value: aaa
案例2是错误的。
建议这个问题?
答案 0 :(得分:0)
这是因为change和itemselect事件都被一个接一个地触发,并且change事件优先于itemSelect事件
如果可见“自动完成”下拉列表,则不要继续进行更改事件 也就是说,将以下内容添加到更改事件行中以避免触发它,并仅调用项目选择事件。
onstart="if(PF('autoCompWidgy').panel.is(':visible')) return false;" />
自动完成的示例如下:
<p:autoComplete id="autoComplete" dropdown="true" value="#{reqdoc.documentType}" completeMethod="#{financeController.completeDocDesc}" forceSelection="true"
rendered="#{empty reqdoc.documentKey}" widgetVar="autoCompWidgy">
<p:ajax event="itemSelect" listener="#{financeController.userAddedDocumentListener(reqdoc)}" process="@this" update="reqDoctable" />
<p:ajax event="change" listener="#{financeController.userAddedDocumentListener(reqdoc)}" process="@this" update="reqDoctable"
onstart="if(PF('autoCompWidgy').panel.is(':visible')) return false;" />
</p:autoComplete>
答案 1 :(得分:-1)
尝试在ajax 立即=&#34; true&#34;
<p:ajax event="itemSelect" process="@this" update="@form" immediate="true"
listener="#{autocompleteController.triggerElement('ai')}" />