Wie kann ich das angeklickte Element in der ajax-Methode?
Angenommen, der code von dieser Seite:
<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>
Und den code des session-managed-bean:
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) wie erhalte ich die ID von dem element, das angeklickt wurde durch den Benutzer. Ich sehe in der lstIdSelectedItems array-Liste mit den IDs aller Elemente, die der Benutzer ausgewählt, aber wie bekomme ich die ID des Elements, das der Benutzer geklickt hat?
Ich habe versucht, verwenden Sie die f:Attribut-tag in der selectManyCheckbox, aber das Attribut wird nicht in der Komponente anzeigen, wenn der ajax-listener-Methode aufgerufen wird, in die gesicherte bean. Ich habe diese verwendet, aber funktioniert nicht:
<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>
Irgendwelche Ideen?
Grüße.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist so daran interessiert, den tatsächlichen Wert ändern und nicht nur in den neuen Wert. Bringen Sie in einem
valueChangeListener
vergleicht den alten Wert mit dem neuen Wert und bereitet einige Eigenschaften, die die ajax-listener-Methode konnte abzufangen auf.E. g.
mit
Wenn in der Liste "selectedItems" Sie das Häkchen in dem end-element der code keinen Aufruf der Methode itemSelected.