JSF selectOneRadio

En JSF, el componente h: selectOneRadio renderiza una tabla HTML que contendrá tantos <input type=»radio»> como componentes f: selectItem se hayan agregado a select One Radio en el formulario JSF.

Asignando una cantidad fija de Radio Buttons

En el primer ejemplo se muestra su utilización agregando una cantidad fija de Radio Buttons mediante el uso de f: selectItem:

<h:selectOneRadio value="#{bean.selectedCountry}">
    <f:selectItem itemValue="argentina" itemLabel="Argentina" />
    <f:selectItem itemValue="uruguay" itemLabel="Uruguay" />
    <f:selectItem itemValue="paraguay" itemLabel="Paraguay" />
    <f:selectItem itemValue="bolivia" itemLabel="Bolivia" />
    <f:selectItem itemValue="peru" itemLabel="Perú" />
</h:selectOneRadio>

El atributo value de h: selectOneRadio contiene una expresión que hace referencia a una propiedad de tipo String en el Managed Bean. El valor del Radio Button seleccionado por el usuario se asignará automáticamente a esta propiedad, lo que permitirá manipular el valor seleccionado desde el código Java.

El código HTML generado es el siguiente:

<form id="customerForm" name="customerForm" method="post" action="/jsf-select-one-radio/pages/inicio.jsf" enctype="application/x-www-form-urlencoded">
    <table id="customerForm:rb-country">
        <tbody>
            <tr>
                <td>
                    <input type="radio" name="customerForm:rb-country" id="customerForm:rb-country:0" value="argentina"><label for="customerForm:rb-country:0"> Argentina</label>
                </td>
                <td>
                    <input type="radio" name="customerForm:rb-country" id="customerForm:rb-country:1" value="uruguay"><label for="customerForm:rb-country:1"> Uruguay</label>
                </td>
                <td>
                    <input type="radio" name="customerForm:rb-country" id="customerForm:rb-country:2" value="paraguay"><label for="customerForm:rb-country:2"> Paraguay</label>
                </td>
                <td>
                    <input type="radio" name="customerForm:rb-country" id="customerForm:rb-country:3" value="bolivia"><label for="customerForm:rb-country:3"> Bolivia</label>
                </td>
                <td>
                    <input type="radio" name="customerForm:rb-country" id="customerForm:rb-country:4" value="peru"><label for="customerForm:rb-country:4"> Perú</label>
                </td>
            </tr>
        </tbody>
    </table>
</form>

Notar que el elemento <table> generado a partir de h: selectOneRadio contiene un id compuesto por el id del h: form que contiene al componente, y el id del componente h: selectOneRadio:

JSF select one radio id

Además, los elementos <input type=”radio> generados tienen un id compuesto por el id del h: form que contiene al componente, el id del componente h: selectOneRadio, y un id secuencial:

JSF select one radio item id

JSF select One Radio con una cantidad variable de Radio Buttons

En el siguiente ejemplo se muestran dos casos en los que el número de Radio Buttons renderizados en la página puede ser determinado en tiempo de ejecución gracias al componente f: selectItems:

<h:selectOneRadio value="#{bean.selectedRiver}" >
    <f:selectItems value="#{bean.rivers}" />
</h:selectOneRadio>

<h:selectOneRadio value="#{bean.selectedLake}" >
    <f:selectItems value="#{bean.lakes}" />
</h:selectOneRadio>

El atributo value de los componentes f: selectItems contienen una expresión que hace referencia a un java.util.List y un java.util.Map, respectivamente. Estos últimos son cargados durante la inicialización del Managed Bean, pudiendo hacerse con datos recuperados, por ejemplo, de una base de datos. A los fines de este ejemplo se hardcodean estos datos en el método init():

@Named("bean")
@RequestScoped
public class ExampleBean implements Serializable {

	private static final long serialVersionUID = 1L;

	private List<SelectItem> rivers;
	private Map<String, String> lakes;
	
	private String selectedCountry;
	private String selectedRiver;
	private String selectedLake;
	
	
	@PostConstruct
	public void init() {
		this.rivers = new ArrayList<SelectItem>();
		this.rivers.add(new SelectItem("parana", "Paraná"));
		this.rivers.add(new SelectItem("limay", "Limay"));
		this.rivers.add(new SelectItem("salado", "Salado"));
		this.rivers.add(new SelectItem("uruguay", "Uruguay"));
		
		this.lakes = new HashMap<String, String>();
		this.lakes.put("san-roque", "San Roque");
		this.lakes.put("argentino", "Argentino");
		this.lakes.put("nahuel-huapi", "Nahuel Huapi");
	}


	//getters & setters


	public String aceptar() {
		return "result";
	}
}
JSF select one radio screen 1

La página de resultados hace referencia a las propiedades selectedCountry, selectedRiver y selectedLake para visualizar los valores seleccionados.

JSF select one radio result

Conclusión

El componente JSF selectOneRadio proporciona una solución simple para crear grupos de botones de radio que permiten a los usuarios seleccionar una sola opción. Mediante el uso de este componente, los desarrolladores pueden vincular fácilmente los datos a un grupo de radio y personalizar su apariencia y comportamiento de acuerdo con los requisitos de su aplicación. Con su sólido conjunto de funciones, el componente selectOneRadio es un activo valioso en cualquier proyecto de desarrollo de aplicaciones web basado en JSF y puede mejorar la experiencia del usuario mejorando la eficiencia y la productividad de los formularios web.


Te puede interesar:

JSF Managed Beans

En JSF, los Managed Beans se pueden configurar de varias maneras, como anotaciones, configuración XML o mediante programación.

Seguir leyendo →

Facelets y uso de templates en JSF

Facelets es un lenguaje de declaración de vistas para JavaServer Faces, que permite crear vistas usando templates HTML.

Seguir leyendo →