ICEfaces: Checkboxen im Programm aktivieren

cuchulainn

Mitglied
ICEfaces: Checkboxen durch Programm aktivieren bzw. deaktivieren

Guten Morgen,

auf meiner jspx-Seite soll es mehrere Checkboxen geben. Die letzte Checkbox ist beschriftet mit "Alle". Ihr ahnt es schon, wenn diese angeklickt wird, sollen alle anderen ein Häkchen bekommen. Wenn sie noch einmal angeklickt wird, soll das Häkchen bei allen gelöscht werden.

Folgendes habe ich mir überlegt (es funktoniert aber nicht):

Code:
<ice:selectManyCheckbox id="selectDomains"
				      value="#{stepByStepSearch.selectedDomains}"
                                     valueChangeListener="#{stepByStepSearch.domainsChanged}">
	<f:selectItems value="#{stepByStepSearch.domainItems}"/>
</ice:selectManyCheckbox>

Dies ist meine SelectManyCheckbox auf meiner jspx-Seite. In meiner Klasse StepByStepSearch gibt es die Methode domainsChanged(), die folgendermaßen aussieht.

Code:
public class StepByStepSearch {
private List<SelectItem> domainItems = new ArrayList<SelectItem>();
private List<String> selectedDomains = new ArrayList<String>(); 

// ..........................

public void changeTraningDestinies(ValueChangeEvent event) {
/* Zuerst schreibe ich die Werte von event.newValue und event.oldValue in eigene Variablen, damit ich sie untersuchen kann. */

ArrayList<String> newValues = (ArrayList)event.getNewValue();
ArrayList<String> oldValues = (ArrayList)event.getOldValue();

/* Dann frage ich ab, ob der String "Alle" in newValues steht. Damit finde ich heraus, ob "Alle" angeklickt wurde. Bis hierher funktionieren meine Überlegungen auch. */

if (newValues.indexOf(Constants.ALL) > -1) {
	selectedDomains.clear();
	
       /* Alle Möglichkeiten werden in selectedDomains geschrieben. */
	for (int i = 0; i < domainItems.size(); i++){
		selectedDomains.add(domainItems.get(i).getLabel());
	}

} else if (oldValues.indexOf(Constants.ALL) > -1) {
	
}

}

Mein Gedankengang war folgender: Wenn "Alle" angeklickt wird, werden alle Möglichkeiten in selectedDomains geschrieben. Und in selectedDomain stehen ja die Namen aller Checkboxen, die angeklickt wurden. Allerdings ändert sich für den Benutzer nichts, d.h. es werden nicht alle Checkboxen anktiviert.

Ich habe nach einer Möglichkeit gesorgt, die SelectItems zu "aktivieren". Das ValueChangeEvent scheine ich ja auch nicht manipulieren zu können.

Es ist ja nichts ungewöhnliches und ich denke, dass es eine recht einfache Lösung für dieses Problem gibt. Hat jemand eine Idee?

Viele Grüße,

Christopher
 
Zuletzt bearbeitet:
Zurück