Как автоматически выбрать первый элемент в предложении autocomplete primefaces jsf - PullRequest
0 голосов
/ 05 июля 2018

У меня есть компонент автозаполнения из простых символов, и в конкретном случае, когда пользователь вводит значение, содержащее «-», мне нужно автоматически выбрать первый элемент, который отображается в предложении, без необходимости нажимать или нажимать кнопку ввода в элементе, чтобы получить значение.

В первый раз я пытаюсь решить проблему в моем 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
}}

но не работает, компонент выводит список правильно, но не обновляет значение первым элементом автоматически.

Так что я пытаюсь разрешить в xhtml с jstl

                   <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>

но компонент не принимает мою команду

...