捕获primefaces <p:autocomplete>更改事件(检测清空)</p:autocomplete>

时间:2014-03-25 12:33:55

标签: jsf jsf-2 primefaces autocomplete

我有一个关于Primefaces自动完成的问题。 Rigth现在我正在使用自动完成中所选值的属性值更新字段,如下所示:

这是我的xhtml:

<p:autoComplete
    value="#{trFitoModel.selectedProducte}"
    id="nomComercial"
    completeMethod="#{trFitoBacking.completeProducte}"
    var="producte" itemLabel="#{producte.nom}"
    itemValue="#{producte}" converter="#{ProducteFitoConverter}"
    forceSelection="true"
    onkeyup="this.value = this.value.toUpperCase();">
    <p:ajax event="itemSelect"
        listener="#{trFitoBacking.handleSelect}"
        update="text" global="false" />
    <f:validator validatorId="qea.validators.EmptyFieldValidator" />
    <f:attribute name="validationTitle" value=" NomComercial " />
</p:autoComplete>
</p:column>
<p:column>
    <h:outputLabel>#{msgI18N.trFito}</h:outputLabel>
    <h:outputText id="text"
        value="#{traFitoBacking.resgistre}">
    </h:outputText>
</p:column>    

这是我的支持豆:

 public void handleSelect(SelectEvent event) {
    ProducteFitosanitari p=(ProducteFitosanitari)event.getObject();
    setResgistre(Integer.toString(p.getNumRegistre()));
}

这样可行,但是当我自动完成的值为空时,我正在尝试使用空字符串更新id为“text”的outputText。

如何捕获p:autoComplete清空时触发的事件?

1 个答案:

答案 0 :(得分:23)

Primefaces autoComplete会生成2个事件:“change”和“itemSelect”,有两种更改内容的方法:输入或从下拉列表中选择。所以你需要注册2个p:ajax听众:

<p:autoComplete ... >
    <p:ajax event="itemSelect" listener="#{bean.action}" process="@form"/> 
    <p:ajax event="change" listener="#{bean.action}" process="@form"/> 
</p:autoComplete>    

您还需要第二个服务器方法签名:

public void action(AjaxBehaviorEvent event)

用于捕获“更改”事件。

而不是event您可以使用onstart属性与JavaScript一起运行...您可以在Primefaces用户指南的“AjaxBehavior”部分找到p:ajax的更多选项。