我向你解释我的问题: 我有一个带有两个组合框(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中执行此操作。
感谢您的关注。