Supponiamo che il codice di questa pagina:Come posso ottenere l'elemento selezionato nel metodo Ajax?
<h:form prependId="false" id="form">
<h:selectManyCheckbox id="checkBoxList" value="#{backedBean.lstIdSelectedItems}" layout="pageDirection">
<f:selectItems value="#{backedBean.lstAvailableItems}" var="item" itemLabel="#{item.label}" itemValue="#{item.value}" />
<f:ajax listener="#{backedBean.itemClicked}" />
</h:selectManyCheckbox>
</h:form>
E il codice di una sessione gestita fagiolo:
public class BackedBean implements Serializable {
private List<SelectItem> lstAvailableItems;
private List<Long> lstIdSelectedItems;
public BackedBean() {
lstAvailableItems = new ArrayList<SelectItem>();
lstIdSelectedItems = new ArrayList<Long>();
}
@PostConstruct
private void postConstruct(){
for (int i = 0; i < 10; i++) {
SelectItem item = new SelectItem(new Long(i), "CHKID " + i);
lstAvailableItems.add(item);
}
}
public void itemClicked(AjaxBehaviorEvent ae){
HtmlSelectManyCheckbox uiCmp = (HtmlSelectManyCheckbox)ae.getSource();
// (1) Here I would like to get the ID of the item that has been clicked.
}
In (1) Vorrei ottenere l'ID dell'elemento che è stato cliccato dall'utente. Riesco a vedere nell'array IstSelectedItems gli ID di tutti gli elementi selezionati dall'utente, ma come posso ottenere l'ID dell'elemento su cui l'utente ha fatto clic?
Ho provato a utilizzare il tag f: attribute all'interno di selectManyCheckbox, ma l'attributo non si trova nella mappa dei componenti quando il metodo del listener ajax viene chiamato nel bean backed. Ho usato questo, ma non funziona:
<h:selectManyCheckbox id="checkBoxList" value="#{backedBean.lstIdSelectedItems}" layout="pageDirection">
<f:selectItems value="#{backedBean.lstAvailableItems}" var="item" itemLabel="#{item.label}" itemValue="#{item.value}">
<f:attribute name="clicked" value="#{item.value}" />
</f:selectItems>
<f:ajax listener="#{backedBean.itemClicked}" />
</h:selectManyCheckbox>
Qualche idea?
Saluti.
Una risposta a questo riassunto appartiene come un commento all'OP ... Si noti anche che questa domanda è stata posta quattro anni fa e aveva una risposta accettata (e approfondita). – kwishnu