rendered ruft eine Methode auf, andere aber nicht

Mr.y

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

Folgender Code:

[XML]<h😛anelGroup rendered="#{Projekt.meineMethode(item) == false}">
<h1>NIX DA</h1>
</h😛anelGroup>
<h😛anelGroup rendered="#{Projekt.meineMethode(item) == true}">
<h1>IST WAS DA</h1>
</h😛anelGroup>[/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]<h😛anelGroup rendered="#{Projekt.andereMethode == null}">
<h1>NIX DA</h1>
</h😛anelGroup>
<h😛anelGroup rendered="#{Projekt.andereMethode != null}">
<h1>IST WAS DA</h1>
</h😛anelGroup>[/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
 
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:

<h😛anelGroup rendered="#{myBean.myMethod">

und innerhalb der Bean:

Java:
public boolean myMethode() {
    return (Projekt.meineMethode(item) == false);
}
 
ä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] <h😛anelGroup rendered="#{Projekt.meineMethode(name)}">
<h1>kein Projekt TEEEEEST KEIN PROJEKT vorhanden</h1>
<h2>bitte ein Projekt eintragen</h2>
</h😛anelGroup>
<h😛anelGroup rendered="#{Projekt.meineMethode(name)}">
<h1>kein Projekt TEEEEEST KEIN PROJEKT vorhanden</h1>
</h😛anelGroup>[/XML]

und dabei soll er in die Methode reingehen:

Java:
Public String meineMethode(String name){
....
}

Aber das zeigt keine Wirkung...

Zur deinem Rat:

[XML]<h😛anelGroup rendered="#{myBean.myMethod">[/XML]

habe ich das nicht mit:

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

schon gemacht???
oder wo ist da der unterschied???
"Projekt" ist der Bean^^
 
Damit das funktionieren kann muss
Code:
meineMethode
vom typ boolean sein.
Innerhalb deiner JSF solltest du dann
HTML:
<h:panelGroup rendered="#{Projekt.meineMethode('name')}">
schreiben
 
Zur deinem Rat:

[XML]<h😛anelGroup rendered="#{myBean.myMethod">[/XML]

habe ich das nicht mit:

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

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

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.
 
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.
 
[XML]<h😛anelGroup rendered="#{Projekt.meineMethode(item) eq false}">
<h1>NIX DA</h1>
</h😛anelGroup>
<h😛anelGroup rendered="#{Projekt.meineMethode(item) eq true}">
<h1>IST WAS DA</h1>
</h😛anelGroup>[/XML]

sollte funktionieren.

eq = equals
ne = not equals
 
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. 🙂
 
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.
 
anke erstmal für eure tipps 🙂

ich hab das jetzt soweit abgeändert:

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

und dann setze ich nen Haltepunkt im java-code:

Java:
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]
 
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
 
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" ???
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben