在用 PrimeFaces 填充 inputText 后如何从 ComboBox 中选择一个项目?

问题描述 投票:0回答:1

我有一个“注册”页面,用户可以在其中填写一些信息,包括一些银行帐户信息。

用户可以通过两种方式选择银行(并从该银行加载信息):

  1. 他可以从selectOneMenu中选择银行的名称,银行的代码将被加载到inpuText中;
  2. 他可以将银行的代码填写到inputText中,然后将从selectOneMenu中选择银行。

该函数的第一部分工作正常,当我将代码插入 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)上创建一个函数,我将不胜感激。

jsf primefaces
1个回答
0
投票

这是我找到的解决方案,我在 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>
© www.soinside.com 2019 - 2024. All rights reserved.