如何自动选择自动完成建议primefaces jsf中的第一项

时间:2018-07-05 11:53:51

标签: jquery-ui primefaces autocomplete

我有一个由素字构成的自动完成组件,在特定情况下,当用户输入一个包含“-”的值时,我需要自动选择建议中显示的第一项,而无需用户单击或按Enter获得价值。

我第一次尝试解决ManagedBean中的问题,但无法这样做,如下所示:

自动完成:

                    <p:autoComplete value="#{emprestimoFrm.matricula}"
                        dropdown="false"
                        completeMethod="#{emprestimoFrm.navegarMatricula}" var="item"
                        itemValue="#{item}" itemLabel="#{item.alunoNomeTurma}"
                        converter="#{emprestimoFrm.conversorMatricula}"
                        emptyMessage="Nenhum registro encontrado." queryDelay="800"
                        rendered="#{emprestimoFrm.habilitarAluno}"
                        onclick="this.value=''">
                        <p:ajax event="valueChange" update="frm:dados"/>
                    </p:autoComplete>

完整方法:

    List<IMatricula> navegarMatricula(String prefix) {
    Matricula[] colMat = null
    try {
        matriculas.clear()
        prefix = prefix.trim()
            if(prefix.contains("-")) {
                tipoLanctoSelecionado = "2"
                colMat = matricula.pesquisar(nome, DataHora.anoCorrente)
                //Goes to copy the first ArrayList object to value AutoComplete    
                Bean.copiarPropriedades(matricula, colMat[0])
                matriculas << colMat[0]
                return matriculas
            }else {
                if(prefix.isNumber()) {
                    colMat = dominio.emprestimo.matricula
                }else{
                    colMat = matricula.pesquisar(prefix,DataHora.anoCorrente)
                }
            }
        for (Matricula item : colMat) {
            matriculas << item
        }
    }catch (ex) {
        imprimirErrosPagina(ex)
    }
    matriculas
}

转换器:

class ConversorNavegacaoMatricula implements Converter{

def matriculas = []

ConversorNavegacaoMatricula( def m) {   
    matriculas = m
}

@Override
Object getAsObject(FacesContext fc, UIComponent ui, String valor) {
    def dominio = null
    if (valor.isNumber()){
        String idMatricula = String.valueOf(valor)
        dominio = matriculas.find {it.idMatricula.equals(idMatricula)}
    }
    dominio
}

@Override
String getAsString(FacesContext fc, UIComponent ui, Object valor) {
    def rotulo = null
    if (valor) {
        rotulo = String.valueOf(((Matricula) valor).getIdMatricula())
    }
    rotulo
}}

但是没有用,组件使列表正确无误,但没有自动更新第一项的值。

所以我尝试使用jstl在xhtml中解析

                   <p:autoComplete value="#{emprestimoFrm.matricula}"
                        dropdown="false"
                        completeMethod="#{emprestimoFrm.navegarMatricula}" var="item"
                        itemValue="#{item}" itemLabel="#{item.alunoNomeTurma}"
                        converter="#{emprestimoFrm.conversorMatricula}"
                        emptyMessage="Nenhum registro encontrado." queryDelay="800"
                        rendered="#{emprestimoFrm.habilitarAluno}"
                        onclick="this.value=''">
                        <c:if test="${fn:contains(item, '-')}">
                            <c:set
                                test="$('#form\\:txtAutoComplete_panel .ui-autocomplete-item').trigger('click');" />
                        </c:if>
                        <p:ajax event="itemSelect" update="frm:dados"/>
                    </p:autoComplete>

但是组件不支持我的命令

0 个答案:

没有答案