Ésta es la solución que propongo para desarrollar un combo dependiente de otro con Primefaces 2.2.1, y SIN NECESIDAD DE RECARGAR LA PÁGINA:
Éste es el código HTML:
<h:outputLabel for="cuentaGrafica" value="Cuenta: " />
<h:selectOneMenu id="cuentaGrafica" immediate="true"
validator="comboCuentaGraficaValidator"
validatorMessage="Debe seleccionar una cuenta"
value="#{movimientosBean.movimientoDTOGrafica.cuentaDTO.id}">
<f:selectItem itemLabel="Seleccione una opción" itemValue="0" />
<f:selectItems value="#{cuentasBean.listaCuentasDTO}"
var="cuenta" itemLabel="#{cuenta.numeroCuenta}"
itemValue="#{cuenta.id}" />
<p:ajax update="anioGrafica"
actionListener="#{movimientosBean.cargaListaAnios}" />
</h:selectOneMenu>
<h:outputLabel for="anioGrafica" value="Año: " />
<h:selectOneMenu id="anioGrafica"
value="#{movimientosBean.movimientoDTOGrafica.anio.anio}">
<f:selectItem itemLabel="Seleccione una opción" itemValue="0" />
<f:selectItems value="#{movimientosBean.listaAnios}" var="anio"
itemLabel="#{anio.anio}" itemValue="#{anio.anio}" />
</h:selectOneMenu>
Y éste es el código Java del Backing Bean:
public void cargaListaAnios(ActionEvent event) {
Integer idCuenta = (Integer) event.getComponent().getAttributes().get(
"value");
try {
setListaAnios(gestorMovimientos.recuperaListaAnios(idCuenta));
} catch (BusinessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Cuando el usuario selecciona una cuenta en el primer combo, salta el Listener asociado al evento de cambio de valor de dicho combo, pudiendo acceder a BDD para cargar el segundo combo con los items dependientes de nuestra elección