0

我向您解释了我的问题:我有一个带有两个组合框 (selectOneMenu) 的应用程序,以及一个必须根据在第二个组合框中选择的内容进行更新的微调器。

我通过在支持 bean 中激活 ajax 来管理此操作,该方法评估相应数据,然后更新微调器。但是我更新了整个表格,即使我告诉你只在微调器上做。

我给你看一个屏幕:

在此处输入图像描述

标有“Salario”的微调器必须根据在标有“Puesto”的组合框中选择的内容进行更新。我将向您展示另一个屏幕,其中显示了当我进行选择时会发生什么: 在此处输入图像描述

我尝试将微调器封闭在单独的 panelGrid 中,并从 bean 更新此 panelGrid,但它仍然删除了第一个组合框的选择。

我还告诉你从 bean 只更新微调器,但它不起作用。

从bean更新的方法代码如下:

    public void obtenerSueldo(){

        //System.out.println(puesto.getSalarioBase());

        if(puesto != null){
            this.contrato.setSalario(puesto.getSalarioBase());
            System.out.println("Salario actualizado por código:" + this.contrato.getSalario());
            RequestContext contexto = RequestContext.getCurrentInstance();
            contexto.update("fomulario:txtSalario");
            //contexto.update("formulario:panel1");
        }else{
            this.contrato.setSalario(0.0);
        }
    }

而xhtml代码如下:

<h:form id="formulario">
            <h:panelGrid id="panel" columns="4">
                <p:outputLabel value="Persona" style="font-weight: bold;"/>
                <p:selectOneMenu id="cboPersona" value="#{contratoFormBean.persona}" required="true" requiredMessage="Debe seleccionar una persona"
                    rendered="#{contratoFormBean.contrato.idContrato == 0}"
                    converter="omnifaces.SelectItemsConverter">
                    <f:selectItem itemLabel="--Seleccione--" itemValue="#{null}"
                        noSelectionOption="true" />
                    <f:selectItems value="#{contratoFormBean.lstPersonas}" var="per"
                        itemLabel="#{per.nombreCompleto}" itemValue="#{per}" />
                </p:selectOneMenu>
                <p:outputLabel value="#{contratoFormBean.persona.nombreCompleto}"
                    rendered="#{contratoFormBean.contrato.idContrato != 0}" />
                <p:message for="cboPersona" />
                <p:tooltip for="cboPersona" value="Elija una persona para el contrato"/>

                <p:outputLabel value="Puesto" style="font-weight: bold;" />
                <p:selectOneMenu id="cboPuesto" value="#{contratoFormBean.puesto}" required="true"
                    update="txtSalario"
                    requiredMessage="Debe seleccionar un puesto de trabajo" 
                    rendered="#{contratoFormBean.contrato.idContrato == 0}"
                    converter="omnifaces.SelectItemsConverter">
                    <p:ajax listener="#{contratoFormBean.obtenerSueldo()}" />
                    <f:selectItem itemLabel="--Seleccione--" itemValue="#{null}"
                        noSelectionOption="true" />
                    <f:selectItems value="#{contratoFormBean.lstPuestos}" var="pue"
                        itemLabel="#{pue.nombre}" itemValue="#{pue}" />
                </p:selectOneMenu>
                <p:outputLabel value="#{contratoFormBean.puesto.nombre}"
                    rendered="#{contratoFormBean.contrato.idContrato != 0}" />
                <p:message for="cboPuesto" />
                <p:tooltip for="cboPuesto" value="Elija una puesto para la persona"/>

                <p:outputLabel value="Fecha Inicio" style="font-weight: bold;"/>
                <p:calendar id="txtFecha" value="#{contratoFormBean.contrato.fechaInicio}" required="true" requiredMessage="Debe indicar una fecha de inicio de contrato"
                    rendered="#{contratoFormBean.contrato.idContrato == 0}" locale="es" pattern="dd/MM/yyyy" mask="99/99/9999"/>
                <p:outputLabel value="#{contratoFormBean.contrato.fechaInicio}"
                    rendered="#{contratoFormBean.contrato.idContrato != 0}" >
                    <f:convertDateTime pattern="dd/MM/yyyy" />
                </p:outputLabel>
                <p:message for="txtFecha" />
                <p:tooltip for="txtFecha" value="Elija una fecha de inicio para el contrato"/>

                <p:outputLabel value="Fecha Fin" style="font-weight: bold;"/>
                <p:calendar id="txtFechaFin" value="#{contratoFormBean.contrato.fechaFin}" required="true" requiredMessage="Debe indicar una fecha de fin de contrato"
                    rendered="#{contratoFormBean.contrato.idContrato == 0}" locale="es" pattern="dd/MM/yyyy" mask="99/99/9999"/>
                <p:outputLabel value="#{contratoFormBean.contrato.fechaFin}"
                    rendered="#{contratoFormBean.contrato.idContrato != 0}">
                    <f:convertDateTime pattern="dd/MM/yyyy" style="font-weight: bold;" />
                </p:outputLabel>
                <p:message for="txtFechaFin" />
                <p:tooltip for="txtFechaFin" value="Elija una fecha de finalización para el contrato"/>

                <p:outputLabel value="Salario" style="font-weight: bold;"/>
                <p:spinner id="txtSalario" value="#{contratoFormBean.contrato.salario}" required="true" requiredMessage="El salario es obligatorio"
                    rendered="#{contratoFormBean.contrato.idContrato == 0}" min="#{contratoFormBean.contrato.salario}" validatorMessage="El monto debe ser mayor o igual al salario mínimo"/>
                <p:outputLabel id="etiquetaSalario" value="#{contratoFormBean.contrato.salario}"
                    rendered="#{contratoFormBean.contrato.idContrato != 0}">
                    <f:convertNumber currencySymbol="$" maxFractionDigits="2"
                        maxIntegerDigits="6" type="currency" />
                </p:outputLabel>
                <p:message for="txtSalario" />
                <p:tooltip for="txtSalario" value="Ingrese un salario"/>

            </h:panelGrid>

            <p:commandButton value="Aceptar" update="@form"
                rendered="#{contratoFormBean.contrato.idContrato eq 0}"
                actionListener="#{contratoFormBean.registrar()}"
                action="contrato?faces-redirect=true" />
            <p:commandButton immediate="true" value="Cancelar" action="contrato?faces-redirect=true"
                rendered="#{contratoFormBean.contrato.idContrato eq 0}"/>
            <p:commandButton value="Aceptar" immediate="true"
                action="contrato?faces-redirect=true"
                rendered="#{contratoFormBean.contrato.idContrato != 0}" />


        </h:form>

有人指出我失败的地方会非常有帮助。

我在 PrimeFaces 页面上阅读了有关部分更新的信息,但它解释了进行不同更新的按钮,我不知道如何从 bean 中进行操作。

感谢您的关注。

4

0 回答 0