У меня есть компонент автозаполнения из простых символов, и в конкретном случае, когда пользователь вводит значение, содержащее «-», мне нужно автоматически выбрать первый элемент, который отображается в предложении, без необходимости нажимать или нажимать кнопку ввода в элементе, чтобы получить значение.
В первый раз я пытаюсь решить проблему в моем 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>
но компонент не принимает мою команду