我有一个由素字构成的自动完成组件,在特定情况下,当用户输入一个包含“-”的值时,我需要自动选择建议中显示的第一项,而无需用户单击或按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>
但是组件不支持我的命令