Curso de JSF 2 | Ejercicio Calidades

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Curso de JSF 2 | Ejercicio Calidades 1

Etiqueta <f:ajax

  • render: Este atributo indica la id del elemento donde se va a almacenar el resultado de la petición ajax.
  • event: Este atributo indica el tipo de evento que detonará la petición ajax.
  • <h:panelGroup: Para poder pintar el resultado de la petición ajax en un componente de tipo <ui:repeat, este debe estar dentro de un componente <h:panelGroup.
<h:form>
	<h:selectOneMenu>
		<f:ajax listener="#{equipoBB.listener}" render="jugadores" event="change"
		execute="@form" />
		<f:selectItems id="combo" value="#{equipoBB.equipos}" var="equipo"
		itemLabel="#{equipo.nombre}" itemValue="#{equipo.equipoCod}" />
	</h:selectOneMenu>
	<h:panelGroup id="jugadores">
		<div style="display: flex">
			<ui:repeat id="cosas" value="#{equipoBB.jugadores}" var="var">
				<h:outputText value="#{var.numeroCamiseta}" /> - 
				<h:outputText value="#{var.nombre}" /><br />
			</ui:repeat>
		...
public void listener(AjaxBehaviorEvent event) {
		EquipoDAO equipoDAO = new EquipoDAO();
		int equipo_cod = Integer.parseInt((String) ((UIOutput)event.getSource()).getValue());
		jugadores = equipoDAO.getJugadoresByEquipo(equipo_cod);
		Iterator<Jugador> it = jugadores.iterator();
		calidades = new ArrayList<String>();
		while(it.hasNext()) {
			Jugador j = it.next();
			String calidad = "<div style=\"background:yellow; width:20px; height:"+j.getCalidad()*10+"px\"></div>";
			calidades.add(calidad);
		}
	}
Descargar ejercicio resuelto

Cómo podríamos realizar este ejercicio sin la etiqueta de Ajax:

<h:selectOneMenu onchange="submit()" valueChangeListener="#{equipoBB.consultaEquipo}">
public void consultaEquipo(ValueChangeEvent event) {
	EquipoDAO equipoDAO = new EquipoDAO();
	jugadores = equipoDAO.getJugadoresByEquipo(Integer.parseInt((String) event.getNewValue()));

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.