# rendered ruft eine Methode auf, andere aber nicht



## Mr.y (10. Okt 2012)

Hallo,
Da ich relativ neu in der Unified-EL bin, hab ich da Fragen und Probleme^^
Und zur "rendered"

Folgender Code:

[XML]<hanelGroup rendered="#{Projekt.meineMethode(item) == false}">
            <h1>NIX DA</h1>
 </hanelGroup>
<hanelGroup rendered="#{Projekt.meineMethode(item) == true}">
            <h1>IST WAS DA</h1>
 </hanelGroup>[/XML]

funktioniert nicht....
die boolesche Methode "meineMethode" erwartet nen Parameter, den ich mit "item" übergeben will
Jedoch geht er in diese Methode im Java-Code nicht rein und macht nix, bestenfalls geht er immer bei dem UL-Unified immer in den ersten Abschnitt rein, wobei ich eigentlich "true" zurückgegeben wäre.

aber, beim folgenden Code geht er in den Java-Code rein und arbeitet...

[XML]<hanelGroup rendered="#{Projekt.andereMethode == null}">
            <h1>NIX DA</h1>
 </hanelGroup>
<hanelGroup rendered="#{Projekt.andereMethode != null}">
            <h1>IST WAS DA</h1>
 </hanelGroup>[/XML]

"andereMethode" gibt ein Objekt zurück oder nicht...sprich null, und das funktioniert. 
Habe ich den Parameter falsch angegeben???
Wobei zu beachten ist...dass der Parameter nicht wirklich eingegeben wird (aus einem InputText oder sowas) , ich brauch einfach einen Platzhalter, weil "meineMethode" einen Parameter erwartet.

Was hab ich beim ersten Code-Beispiel falsch gemacht?
Danke für jeden Tipp


----------



## Fant (10. Okt 2012)

Was für einen Parameter erwartet deine Methode denn und was soll _item_ hier sein?

Wenn du etwas kompliziertere boolsche Ausdrücke auswerten und innerhalb deiner jsf benutzen möchtest, dann bietet es sich oft ganz gut an eine entsprechende Methode in deiner ManagedBean anzulegen, die direkt den passenden boolschen Wert zurückgibt.
Also Quick&Dirty grob so:

<hanelGroup rendered="#{myBean.myMethod">

und innerhalb der Bean:


```
public boolean myMethode() {
    return (Projekt.meineMethode(item) == false);
}
```


----------



## Mr.y (10. Okt 2012)

ähhmm..."item" soll eignetlich nen String-Argument der "MeineMethode" sein.
Aber beim Debuggen geht er einfach nicht in "meineMethode" rein.

Ich hab schon sowas ausprobiert:

[XML] <hanelGroup rendered="#{Projekt.meineMethode(name)}">
            <h1>kein Projekt TEEEEEST KEIN PROJEKT vorhanden</h1>
            <h2>bitte ein Projekt eintragen</h2>           
        </hanelGroup>
 <hanelGroup rendered="#{Projekt.meineMethode(name)}">
  <h1>kein Projekt TEEEEEST KEIN PROJEKT vorhanden</h1>
</hanelGroup>[/XML]

und dabei soll er in die Methode reingehen:


```
Public String meineMethode(String name){
....
}
```

Aber das zeigt keine Wirkung...

Zur deinem Rat:

[XML]<hanelGroup rendered="#{myBean.myMethod">[/XML]

habe ich das nicht mit: 

[XML]<hanelGroup rendered="#{Projekt.meineMethode(name)}">[/XML]

schon gemacht???
oder wo ist da der unterschied??? 
"Projekt" ist der Bean^^


----------



## Fant (10. Okt 2012)

Damit das funktionieren kann muss 
	
	
	
	





```
meineMethode
```
 vom typ boolean sein.
Innerhalb deiner JSF solltest du dann

```
<h:panelGroup rendered="#{Projekt.meineMethode('name')}">
```
 schreiben


----------



## Fant (10. Okt 2012)

Mr.y hat gesagt.:


> Zur deinem Rat:
> 
> [XML]<hanelGroup rendered="#{myBean.myMethod">[/XML]
> 
> ...



Hier ging es mir darum, dass du in deiner Variante vom Anfang eine Methode mit Parameter auswertest und dann noch einen Vergleich durchführst. Wenn du diese Auswertung in die Bean auslagerst, dann kannst du das uU auf eine Auswertung einer Methode ohne Parameter reduzieren.


----------



## Sym (10. Okt 2012)

Wo ist denn name (oder item) definiert? Und ist myBean jetzt von Dir oder nur ein Kopierfehler?

Bitte poste mal den ganzen Code.

edit: Ach name soll der eigentliche String sein? Dann ist Dir mit 
[xml]Projekt.meineMethode('name')[/xml] geholfen. Allerdings ist ein Vergleich hier mittels == (wie Fant geschrieben hat) zu vermeiden.


----------



## jwiesmann (10. Okt 2012)

[XML]<hanelGroup rendered="#{Projekt.meineMethode(item) eq false}">
            <h1>NIX DA</h1>
 </hanelGroup>
<hanelGroup rendered="#{Projekt.meineMethode(item) eq true}">
            <h1>IST WAS DA</h1>
 </hanelGroup>[/XML]

sollte funktionieren.

eq = equals
ne = not equals


----------



## Fant (10. Okt 2012)

Sym hat gesagt.:


> Allerdings ist ein Vergleich hier mittels == (wie Fant geschrieben hat) zu vermeiden.



Wieso sollte man primitive Datentypen (hier boolean) nicht mit == vergleichen? Abgesehen davon hab ich ja extra die Warnung "Quick&Dirty" dazugeschrieben  Mir gings da nur darum die Grundidee zu zeigen.


----------



## Sym (10. Okt 2012)

Fant hat gesagt.:


> Wieso sollte man primitive Datentypen (hier boolean) nicht mit == vergleichen? Abgesehen davon hab ich ja extra die Warnung "Quick&Dirty" dazugeschrieben  Mir gings da nur darum die Grundidee zu zeigen.


Ich hätte es besser formulieren sollen. Ein Vergleich im EL ist nicht notwendig, da die Methode auch einen primitiven Boolean zurückgeben kann und dann kein explizierter Vergleich im EL notwendig ist. Um das == direkt ging es mir nicht. eq wäre genauso unnötig.


----------



## sence (10. Okt 2012)

generell sollte in EL jedoch folgende Syntax verwendung finden:
emtpy x | anstelle von x == null
not empty x | anstelle x != null
gt x | anstelle von > x
ge x | anstelle von >= x
lt x | anstelle von < x
le x | anstelle von <= x

wieso ? je nach implementierung der ExpressionFactory können Probleme auftauchen.


----------



## Mr.y (11. Okt 2012)

anke erstmal für eure tipps 

ich hab das jetzt soweit abgeändert:

[XML]<hanelGroup rendered="#{Projekt_EJBVerdrahtung.meineMethode('strName') eq false}">
            <h1>t TEEEEEST KEIN PROJEKT </h1>
            <
        </hanelGroup>
 <hanelGroup rendered="#{Projekt_EJBVerdrahtung.meineMethode('strName') eq true}"> usw...[/XML]

und dann setze ich nen Haltepunkt im java-code:


```
public boolean meineMethode(String strName) throws meineException, Exception {
        boolean blnResult = false;
        try {
            if (pProjektService.findProjekt(strProjektname)!=null) {
         usw.....
```

ich setze den Haltepunkt einfach mal bei der Deklaration und dennoch geht er nicht darein

An der Oberfläche wird auch nix angezeigt, d.h. Er wertet nix aus und er geht weder in das einer "rendered" noch in das andere "rendered"

Der aufruf der xhtml-Seite ist eigneltich korrekt, weil ich nach vielem Ausprobieren es geschafft hab, dass er mir wenigstens                         
"TEEEEST KEIN PROJEKT" anzeigt, nun ist alles leer und ich kann nix debugen in Java. 

Der Aufruf in der xhtml:

[XML] <ui:define name="content">
                <ui:include src="Details.xhtml"/> 
   </ui:define>[/XML]


----------



## sence (11. Okt 2012)

ist der Anfangsbuchstabe deiner Klasse korrekt: Projekt_EJBVerdrahtung
oder sollte es: projekt_EJBVerdrahtung heissen ?

hat deine Bean die notwendigen Annotations ?

Sofern deine Bean das erste mal beim Seitenaufruf initialisiert wird, kannst du im Konstruktor mal testweise nen 
System.out.println("Bean wird initialisiert"); 
machen. Wenn die Bean initialisiert wird, stimmen die Pfade, wenn nicht dann würde ich dort weiter suchen

was sagt der Server Log? irgendwelche Fehler ?

Grüße


----------



## Mr.y (11. Okt 2012)

TAATSÄCHLICH!!!!

ich hab in der xhtml Projekt_EJBVerdrahtung groß anstatt klein geschrieben und schon hat es nicht mehr funktioniert :bahnhof:

Warum nur und gibts einen equivalten zur "else" ???


----------



## sence (11. Okt 2012)

Welche Implementierung und Version von jsf verwendest du ?


----------



## Mr.y (11. Okt 2012)

äähmm...^^ wie kann man das rausfinden ?


----------



## sence (11. Okt 2012)

Siehe PN


----------

