我有一个“注册”页面,用户可以在其中填写一些信息,包括一些银行帐户信息。
用户可以通过两种方式选择银行(并从该银行加载信息):
该函数的第一部分工作正常,当我将代码插入 inputText 后尝试从组合框中选择一个项目时,我遇到了问题。
这是页面组件:
<p:panel header="Dados Bancários" toggleable="true" toggleableHeader="true" id="panelBancoPF">
<h:panelGrid columns="2" columnClasses="coluna1,coluna2">
<h:outputText value="Código do Banco: " />
<h:panelGrid columns="4" columnClasses="coluna2,coluna1,coluna2,coluna2">
<h:inputText size="10" onkeypress="mascaraInteiro(this);" value="#{pess.dsnobanco}" maxlength="38">
<p:ajax onstart="PF('dialogProcessando').show();"
onsuccess="PF('dialogProcessando').hide();"
onerror="PF('dialogProcessando').hide();"
oncomplete="PF('dialogProcessando').hide();"
event="change"
listener="#{cadastroPeritoControl.encontraBanco('Fisica')}"/>
</h:inputText>
<h:outputText value="Nome do Banco: " />
<p:selectOneMenu id="listaNomesBancos" size="50" widgetVar="editaBanco"
filterMatchMode="contains" value="#{cadastroPeritoControl.bancoSelecionado}"
converter="CptbancoConverter" rendered="#{not empty cadastroPeritoControl.listaBancos}"
maxlength="200" onkeyup="maiuscula(this)" >
<f:selectItem itemValue="" itemLabel="" noSelectionOption="true" />
<f:selectItems value="#{cadastroPeritoControl.listaBancos}"
var="banco" itemLabel="#{banco.fullName}" />
<p:ajax event="change" update="formPrincipal:panelBancoPF"
listener="#{cadastroPeritoControl.bancoOnChange('Fisica')}"
onstart="PF('dialogProcessando').show();"
onsuccess="PF('dialogProcessando').hide();"
onerror="PF('dialogProcessando').hide();"
oncomplete="PF('dialogProcessando').hide();" />
</p:selectOneMenu>
</h:panelGrid>
....
首先,我尝试更新后端中的“bancoSelecionado”对象,但这只是覆盖最后选定的对象,所以我看到 PrimeFaces 上有一个 selectValue(value) 函数,看起来正是我需要的,但是我不知道如何使用它,并且我尝试放置它的每个地方都不起作用。
如果有人能给我一个如何使用这个 selectValue(value) 函数的例子,或者如果有更好的方法使用 PrimeFaces 来实现它,或者在后端(Java)上创建一个函数,我将不胜感激。
这是我找到的解决方案,我在 inputText 中添加了一个“onblur”事件,该事件调用脚本函数来获取输入的值,并使用 PrimeFaces“selectValue”函数在 ComboBox 中设置该值。
<p:panel header="Dados Bancários" toggleable="true" toggleableHeader="true" id="panelBancoPF">
<h:panelGrid columns="2" columnClasses="coluna1,coluna2">
<h:outputText value="Código do Banco: " />
<h:panelGrid columns="4" columnClasses="coluna2,coluna1,coluna2,coluna2">
<h:inputText id="codigoBancoPF" size="10"
onkeypress="mascaraInteiro(this);" value="#{pess.dsnobanco}"
maxlength="38" onblur="atualizaComboBanco();">
<p:ajax onstart="PF('dialogProcessando').show();"
onsuccess="PF('dialogProcessando').hide();"
onerror="PF('dialogProcessando').hide();"
oncomplete="PF('dialogProcessando').hide();"
event="change" />
</h:inputText>
<h:outputText value="Nome do Banco: " />
<p:selectOneMenu id="listaNomesBancosPF" size="50" widgetVar="editaBancoPF"
filter="true" filterMatchMode="contains"
value="#{cadastroPeritoControl.bancoSelecionado}" converter="CptbancoConverter"
rendered="#{not empty cadastroPeritoControl.listaBancos}"
maxlength="200" onkeyup="maiuscula(this)">
<f:selectItem itemValue="" itemLabel="" noSelectionOption="true" />
<f:selectItems value="#{cadastroPeritoControl.listaBancos}"
var="banco" itemLabel="#{banco.fullName}" />
<p:ajax event="change" update="formPrincipal:panelBancoPF"
listener="#{cadastroPeritoControl.bancoOnChange('Fisica')}"
onstart="PF('dialogProcessando').show();"
onsuccess="PF('dialogProcessando').hide();"
onerror="PF('dialogProcessando').hide();"
oncomplete="PF('dialogProcessando').hide();" />
</p:selectOneMenu>
</h:panelGrid>
</h:panelGrid>
</p:panel>
<script>
function atualizaComboBanco() {
var codigoBancoPF = getCodigoBancoHtml();
PF('editaBancoPF').selectValue(codigoBancoPF);
}
function getCodigoBancoHtml() {
return document.getElementById('formPrincipal:codigoBancoPF').value;
}
</script>