metaPoaEditForm.xhtml
<!--CAMPO-->
<p:selectManyMenu id="actividadMejoraSelectManyMenu"
value="#{metaPoaBean.listaActividadesMejoraSeleccionadas}"
converter="#{actividadMejoraBean.converter}"
var="am"
filter="true"
filterMatchMode="contains"
showCheckbox="true"
styleClass="una-selectManyMenu"
rendered="#{metaPoaBean.isPlanOperativoUnidad()}"
>
<p:ajax process="@this"
listener="#{metaPoaBean.actualizaActividadesMejoraSeleccionadas}"
update="@this,
:#{p:resolveFirstComponentWithId('actividadRiesgoOutputPanel', view).clientId}"/>
<f:selectItems value="#{metaPoaBean.listaAllActividadesMejora}"
var="codAM"
itemLabel="#{codAM.codigo}"
itemValue="#{codAM}"
>
</f:selectItems>
<p:column>
<h:outputText value="#{am.codigo}"/>
</p:column>
<p:column>
<h:outputText value="#{am.descripcion}"/>
</p:column>
</p:selectManyMenu>
Y deseamos que el usuario solo pueda seleccionar una opción
Podemos agregarle la siguiente propiedad
itemDisabled="#{metaPoaBean.actividadMejoraDisabled(codAM)}"
Donde llamaría a un metodo llamado actividadMejoraDisabled que determina si debe o no el itema estar habilitado
Ahora para la tarea existe la salvedad de que existen 2 selectManyMenu uno de actividades de mejora y otro actividades de respuesta
y solo se puede seleccionar uno de ambos selectManyMenu
Además existe este código
<p:ajax process="@this"
listener="#{metaPoaBean.actualizaActividadesMejoraSeleccionadas}"
update="@this"/>
Que escucha el evento «change»
Entonces para aplicar la funcionalidad primero agregamos el llamado a metodo que verifica si debe o no estar habilitado el item
mejora
Agregamos dentro de selectItems
itemDisabled="#{metaPoaBean.actividadMejoraDisabled(codAM)}"
<!-- ***************************************************************************** -->
<!-- ***************************************************************************** -->
<!-- ACTIVIDAD MEJORA -->
<!-- ***************************************************************************** -->
<!-- ***************************************************************************** -->
<!--LABEL-->
<p:outputLabel id="actividadMejoraOutputLabel"
for="actividadMejoraSelectManyMenu"
value="#{i18n.metaPoa_actividadMejora_header_label}"
rendered="#{metaPoaBean.isPlanOperativoUnidad()}"
/>
<!--PANEL-->
<p:outputPanel id="actividadMejoraOutputPanel"
rendered="#{metaPoaBean.isPlanOperativoUnidad()}">
<!--CAMPO-->
<p:selectManyMenu id="actividadMejoraSelectManyMenu"
value="#{metaPoaBean.listaActividadesMejoraSeleccionadas}"
converter="#{actividadMejoraBean.converter}"
var="am"
filter="true"
filterMatchMode="contains"
showCheckbox="true"
styleClass="una-selectManyMenu"
rendered="#{metaPoaBean.isPlanOperativoUnidad()}"
>
<p:ajax process="@this"
listener="#{metaPoaBean.actualizaActividadesMejoraSeleccionadas}"
update="@this,
:#{p:resolveFirstComponentWithId('actividadRiesgoOutputPanel', view).clientId}"/>
<f:selectItems value="#{metaPoaBean.listaAllActividadesMejora}"
var="codAM"
itemLabel="#{codAM.codigo}"
itemValue="#{codAM}"
itemDisabled="#{metaPoaBean.actividadMejoraDisabled(codAM)}">
</f:selectItems>
<p:column>
<h:outputText value="#{am.codigo}"/>
</p:column>
<p:column>
<h:outputText value="#{am.descripcion}"/>
</p:column>
</p:selectManyMenu>
<!--MENSAJE-->
<p:message id="actividadMejoraMessage"
for="actividadMejoraSelectManyMenu"
rendered="#{metaPoaBean.isPlanOperativoUnidad()}"/>
</p:outputPanel>
<!-- ***************************************************************************** -->
<!-- ***************************************************************************** -->
<!-- ***************************************************************************** -->
<!-- ***************************************************************************** -->
Y modificamos el evento change para que actualice el componete de riesgo
quedando así
<p:ajax process="@this"
listener="#{metaPoaBean.actualizaActividadesMejoraSeleccionadas}"
update="@this,
:#{p:resolveFirstComponentWithId('actividadRiesgoOutputPanel', view).clientId}"/>
Riesgo
<!-- ***************************************************************************** -->
<!-- ***************************************************************************** -->
<!-- ACTIVIDAD RIESGO -->
<!-- ***************************************************************************** -->
<!-- ***************************************************************************** -->
<!--LABEL-->
<p:outputLabel id="actividadRiesgoOutputLabel"
for="actividadRiesgoSelectManyMenu"
value="#{i18n.metaPoa_actividadRiesgo_header_label}"
rendered="#{metaPoaBean.isPlanOperativoUnidad()}"
/>
<!--PANEL-->
<p:outputPanel id="actividadRiesgoOutputPanel"
rendered="#{metaPoaBean.isPlanOperativoUnidad()}">
<!--CAMPO-->
<p:selectManyMenu id="actividadRiesgoSelectManyMenu"
value="#{metaPoaBean.listaActividadesRiesgoSeleccionadas}"
converter="#{actividadRespuestaRiesgoBean.converter}"
var="am"
filter="true"
filterMatchMode="contains"
showCheckbox="true"
styleClass="una-selectManyMenu"
rendered="#{metaPoaBean.isPlanOperativoUnidad()}"
>
<p:ajax process="@this"
listener="#{metaPoaBean.actualizaActividadesRiesgoSeleccionadas}"
update="@this,
:#{p:resolveFirstComponentWithId('actividadMejoraOutputPanel', view).clientId}"/>
<f:selectItems value="#{metaPoaBean.listaAllActividadesRiesgo}"
var="codARR"
itemLabel="#{codARR.codigo}"
itemValue="#{codARR}"
itemDisabled="#{metaPoaBean.actividadRiesgoDisabled(codARR)}">
</f:selectItems>
<p:column>
<h:outputText value="#{am.codigo}"/>
</p:column>
<p:column>
<h:outputText value="#{am.descripcion}"/>
</p:column>
</p:selectManyMenu>
<!--MENSAJE-->
<p:message id="actividadRiesgoMessage"
for="actividadRiesgoSelectManyMenu"
rendered="#{metaPoaBean.isPlanOperativoUnidad()}"/>
</p:outputPanel>
<!-- ***************************************************************************** -->
<!-- ***************************************************************************** -->
<!-- ***************************************************************************** -->
<!-- ***************************************************************************** -->
MetaPoaBean.java
Ahora creamos los metodos que van a aplicar la logica sobre si habilitar o no
/**
* Función: Determinar si el item del selectManyMenu de ActividadMejora debe o no estar habilitado
* @param actividadMejoraSelected
* @return true = deshabilitado/ false = habilitado
* @author Gustavo Matamoros González
* @issue BTPPI-389
*/
public boolean actividadMejoraDisabled(ActividadMejora actividadMejoraSelected){
// Si las no hay AM ni ARR seleccionadas esta habilitado
if( (this.getListaActividadesMejoraSeleccionadas().isEmpty()) && (this.getListaActividadesRiesgoSeleccionadas().isEmpty())){
return false;
}
// Si hay ARR esta deshabilitado
if(!this.getListaActividadesRiesgoSeleccionadas().isEmpty()){
return true;
}
//Si es el item enviado igual habilite
for(ActividadMejora actividadMejora : this.getListaActividadesMejoraSeleccionadas()){
if(actividadMejora.equals(actividadMejoraSelected)){
return false;
}
}
// sino deshabilite
return true;
}
/**
* Función: Determinar si el item del selectManyMenu de ActividadMejora debe o no estar habilitado
* @param actividadMejoraSelected
* @return true = deshabilitado/ false = habilitado
* @author Gustavo Matamoros González
* @issue BTPPI-389
*/
public boolean actividadRiesgoDisabled(ActividadRespuestaRiesgo actividadRespuestaRiesgoSelected){
// Si las no hay AM ni ARR esta habilitado
if( (this.getListaActividadesMejoraSeleccionadas().isEmpty()) && (this.getListaActividadesRiesgoSeleccionadas().isEmpty())){
return false;
}
// Si hay AM esta deshabilitado
if(!this.getListaActividadesMejoraSeleccionadas().isEmpty()){
return true;
}
//Si es el item enviado igual habilite
for(ActividadRespuestaRiesgo actividadRespuestaRiesgo : this.getListaActividadesRiesgoSeleccionadas()){
if(actividadRespuestaRiesgo.equals(actividadRespuestaRiesgoSelected)){
return false;
}
}
// sino deshabilite
return true;
}