Andrea "Kiraya"Magini

IT Professional Master

Single post

JSF2 SelectOneRadio e DataTable

Spesso capita di dover utilizzare ,lavorando con le JSF, in una colonna di una DataTable i radiobutton. Ovviamente non appartenendo allo stesso container (essendo contenuti uno in ogni cella diversa), non sono raggruppabili, e, in html, agiscono come entità separate e svincolate.

Utilizzando le Java Server Faces, ci vengono in aiuto i valueChangeListeners.
Innanzitutto, mettiamo il selectoneradio nella datatable, impostando come listener un metodo sul nostro backingBean.

<h:dataTable value="#{bean.elementi}" var="elemento">
<h:column>
<f:facet name="header">Seleziona:</f:facet>
<h:selectOneRadio id="radioSeleziona" value="#{bean.selezione}" valueChangeListener="#{bean.doSeleziona}" onclick="dataTableSelectRadio(this);">
<f:selectItem itemValue="#{elemento.id}"></f:selectItem>
</h:selectOneRadio>
</h:column>
</h:dataTable>

 

Non essendo un radioButton multiplo (non è un insieme), per deselezionare gli altri radioButton quando si clicca su quello scelto,utilizziamo una funzione javascript agganciata nell’evento onclick.

function dataTableSelectRadio(radio) {
var id = radio.name.substring(radio.name.lastIndexOf(':'));
var element = radio.form.elements;
for (var i = 0; i < element.length; i++) {
if (element[i].name.substring(element[i].name.lastIndexOf(':')) == id) {
element[i].checked = false;
}
}
radio.checked = true;
}

Sul nostro backingBean poi , andiamo ad implementare il ValueChangeListener:

public void doSeleziona(ValueChangeEvent event){
elementoSelezionato= (String)event.getNewValue();
internalDoQualcosa();
}

Ovviamente potete sostituire lo script javascript con qualcosa di più semplice utilizzando JQuery, ma la sostanza rimane questa.

Select the fields to be shown. Others will be hidden. Drag and drop to rearrange the order.
  • Immagine
  • SKU
  • Valutazioni
  • Prezzo
  • Magazzino
  • Disponibilità
  • Aggiungi al carrello
  • Descrizione
  • Contenuto
  • Peso
  • Dimensioni
  • Colore
  • Additional information
  • Attributi
  • Custom fields
Comparatore
Lista desideri 0
Apri la Lista desideri Continua lo shopping