# JSF: Checkboxen sollen InputText aktivieren.



## Zasch (7. Okt 2007)

Hallo zusammen,

ich plage mich nun schon seit Tagen mit einem einzigen Problem und glaube langsam, dass ich verrückt werde. Ich habe da so ein JSF-Projekt, in dem jeweils nach Klick auf eine BooleanCheckbox das zugehörige InputText-Feld aktiviert werden soll. Im Detail sieht das so aus:


```
...
<h:panelGrid border="0" columns="3" styleClass="text">
<h:selectBooleanCheckbox id="abc1" onclick="submit()" 
valueChangeListener="#{InputText.processValueChange}" immediate="true" />
<h:inputText size="10" maxlength="15" disabled="#{InputText.abc1}" />
<h:outputText value="ABC1" />
						
<h:selectBooleanCheckbox id="abc2" immediate="true" onclick="submit()" 
valueChangeListener="#{InputText.processValueChange}" />
<h:inputText size="10" maxlength="15" disabled="#{InputText.abc2}" />
<h:outputText value="ABC2" />
					
<h:selectBooleanCheckbox id="abc3" immediate="true" onclick="submit()" 
valueChangeListener="#{InputText.processValueChange}" />
<h:inputText size="10" maxlength="15" disabled="#{InputText.abc3}" />
<h:outputText value="ABC3" />
						
<h:selectBooleanCheckbox id="abc4" immediate="true" onclick="submit()" 
valueChangeListener="#{InputText.processValueChange}" />
<h:inputText size="10" maxlength="15" disabled="#{InputText.abc4}" />
<h:outputText value="ABC4" />				
</h:panelGrid>
...
```

und die Bean dazu:


```
...
public final class uicomponents implements ValueChangeListener {

	Boolean abc1 = true, abc2 = true, abc3 = true, abc4 = true;
	
	//----- ValueChangeListener -----//
	public void processValueChange(ValueChangeEvent e){
		Boolean x = (Boolean)e.getNewValue();
		String a = e.getComponent().getId();
		
		if (a.compareToIgnoreCase("abc1") == 0){
			setAbc1(!x);
		}
		if (a.compareToIgnoreCase("abc2") == 0){
			setAbc2(!x);
		}
		if (a.compareToIgnoreCase("abc3") == 0){
			setAbc3(!x);
		}
		if (a.compareToIgnoreCase("abc4") == 0){
			setAbc4(!x);
		}
	}
	
	//----- Getter Methods -----//
	public Boolean getAbc1(){
		return abc1;
	}
	
	public Boolean getAbc2(){
		return abc2;
	}
	
	public Boolean getAbc3(){
		return abc3;
	}
	
	public Boolean getAbc4(){
		return abc4;
	}
	
	//----- Setter Methods -----//
	public void setAbc1(Boolean abc1){
		this.abc1 = abc1;
	}

	public void setAbc2(Boolean abc2){
		this.abc2 = abc2;
	}
	
	public void setAbc3(Boolean abc3){
		this.abc3 = abc3;
	}
	
	public void setAbc4(Boolean abc4){
		this.abc4 = abc4;
	}
}
```

Das Problem daran ist: Wenn ich die erste checkbox anklicke, wird auch das erste inputtextfeld wie erwartet freigegeben. Wenn ich jedoch daraufhin die 2. checkbox anklicke passiert folgendes: die erste checkbox bleibt checked, die zweite ist auch checked, das erste inputtext wird aber wieder disabled und nur das zweite ist aktiv, es sollten aber beide aktiv sein.

Das ganze sieht dann so aus:







Ich bin mir ziemlich sicher, dass es nur ein blöder Fehler in der Bean sein kann, aber ich komme einfach nicht drauf (hab mit JSF auch noch nicht so viel Erfahrung). Wäre super, wenn mich da jemand auf den richtigen Pfad bringen, oder mir eine einfach Lösung für das Problem geben könnte.

Danke schonmal im Voraus...


----------



## Zasch (10. Okt 2007)

Hat wirklich niemand eine Idee?


----------



## maki (10. Okt 2007)

Was passiert, wenn du immediate weglässt?


----------



## Zasch (10. Okt 2007)

Da passiert genau das gleiche maki.

Deswegen zweifle ich ja an mir (und ein wenig an meinem Java-Code). Meine Arbeitskollegen sind genauso ratlos und haben schon vorgeschlagen irgendein JavaScript zu schreiben, was das erledigt. Nur wenn es nicht unbedingt sein muß, wollte ich genau das vermeiden.

Ich bin für jede weitere Idee also sehr dankbar!


----------



## maki (11. Okt 2007)

Was du da machst, sieht so aus, als ob du "doppelt moppelst", ein Actionlistener, der die Werte setzt, und dann das noch invers (!abc1... das führt zu verwirrendem Code, der schwer zu verstehen ist.

Versuche doch mal, das ganze einfacher zu lösen.

Damit meine ich, das du nicht in einem ActionListener den Wert der boolean Variablen setzt, sondern direkt deren Wert ausliest 

Der Wert der Eigentschaft 'abc1' könnte doch eigentlich automatisch gesetzt werden 

In einer Bean:

```
...
boolean abc1= false;

public boolean getAbc1() { return abc1; }
public void setAbc1(boolean newValue) { this.abc1= newValue; }
..
```

In der JSP:

```
<h:selectBooleanCheckbox id="abc1" onclick="submit()"
value="#{InputText.abc1}" />
<h:inputText size="10" maxlength="15" disabled="#{not InputText.abc1}" />
<h:outputText value="ABC1" />
```
Ohne gewähr, habs nicht getestet, könnten also noch Fehler drinnsein


----------



## Zasch (11. Okt 2007)

Hey maki,

schien eine sehr gute Idee zu sein, doch leider sieht es so aus, als würde 

```
<h:selectBooleanCheckbox value="#{InputText.abc1}" />
```
 auch auf den Getter zugreifen und den Value holen, statt ihn zu setzen.
Ich habe langsam die Befürchtung, als wäre mein Vorhaben in JSF nicht umsetzbar.  :?


----------



## maki (11. Okt 2007)

> doch leider sieht es so aus, als würde <h:selectBooleanCheckbox value="#{InputText.abc1}" /> auch auf den Getter zugreifen und den Value holen, statt ihn zu setzen.


Eigentlich sollte er beides machen, den getter in der "render response" phase und den setter in der "update model values" phase.

Bekommst du messages?


----------



## Zasch (16. Okt 2007)

Auch messages gibt es da keine. Es läuft alles so normal wie es könnte...


----------



## maki (18. Okt 2007)

Schmeiss mal *alle* immediates  aus der JSP Seite raus, es ist das am häufigsten Missverstandene feature.


----------



## Zasch (23. Okt 2007)

Sind alle draussen, aber es gibt keine Änderung.


----------



## Guest (19. Nov 2007)

Nur um mein Problem nochmal nach oben zu schubsen...

noch andere Ideen? Ich verzweifel langsam!


----------



## Zasch (19. Nov 2007)

Anonymous hat gesagt.:
			
		

> Nur um mein Problem nochmal nach oben zu schubsen...
> 
> noch andere Ideen? Ich verzweifel langsam!



mein Fehler, ich war nicht eingelogged...


----------



## Guest (22. Apr 2008)

hi,

hast du das problem hinbeommen?
ich hab das gleiche!

wäre super wenn du mir noch rückmeldung geben kannst.

gruß


----------



## Guest (24. Apr 2008)

Hi,

ich dachte, es gehen gar keine boolean Werte, außer du schreibst dir einen eigenen Konverter.

Grüße
Sven


----------



## number8 (6. Mai 2008)

Ich habe das ganze mal schnell in netbeans6 kopiert...und...es läuft. habe nur den namen der managedbean geändert. Heißt bei mir "inputs", was aber keinen Einfluss hat (haben sollte)


----------

