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

Bekanntes Mitglied
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:panelGroup rendered="#{myBean.myMethod">

und innerhalb der Bean:

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

Mr.y

Aktives Mitglied
ä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:panelGroup rendered="#{Projekt.meineMethode(name)}">
<h1>kein Projekt TEEEEEST KEIN PROJEKT vorhanden</h1>
<h2>bitte ein Projekt eintragen</h2>
</h:panelGroup>
<h:panelGroup rendered="#{Projekt.meineMethode(name)}">
<h1>kein Projekt TEEEEEST KEIN PROJEKT vorhanden</h1>
</h:panelGroup>[/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:panelGroup rendered="#{myBean.myMethod">[/XML]

habe ich das nicht mit:

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

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

Fant

Bekanntes Mitglied
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
 

Fant

Bekanntes Mitglied
Zur deinem Rat:

[XML]<h:panelGroup rendered="#{myBean.myMethod">[/XML]

habe ich das nicht mit:

[XML]<h:panelGroup 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.
 
S

Sym

Gast
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

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

sollte funktionieren.

eq = equals
ne = not equals
 
S

Sym

Gast
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

Bekanntes Mitglied
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

Aktives Mitglied
anke erstmal für eure tipps :)

ich hab das jetzt soweit abgeändert:

[XML]<h:panelGroup rendered="#{Projekt_EJBVerdrahtung.meineMethode('strName') eq false}">
<h1>t TEEEEEST KEIN PROJEKT </h1>
<
</h:panelGroup>
<h:panelGroup 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]
 

sence

Bekanntes Mitglied
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

Aktives Mitglied
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:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D JSF Aufruf des Value Attributes trotz rendered = false Web Tier 2
I rendered bei Enums JSF Web Tier 3
E JSF MangedBean ruft andere ManagedBean auf Web Tier 3
S Wie eine Chatprotokoll realisieren? Web Tier 13
jann Servlet Bei jedem Request wird eine neue Session erstellt. Web Tier 6
S JSF Eine XHTML-Datei in zwei andere XHTML integrieren Web Tier 0
V Wie baue ich eine Ajax Webanwendung? Suche Beispielanwendung (UML) eines AJAX Service Web Tier 0
X JSF - eine Liste aller Sessions, Instanzen bzwFacesContexte bekommen? Web Tier 4
M JSP Mit JSP eine SQLite Datenbank editieren? Web Tier 1
P JSF Eine JSF-Applikation in Drupal darstellen - Möglich? Web Tier 5
T JSF Primefaces beim öffnen eines p:dialog wird eine neue View ManagedBean erstellt Web Tier 2
J Was ist denn eine index.jsp seite ? Web Tier 5
M JSP Objekt in eine JavaBean übergeben Web Tier 7
N rich:extendedDataTable hat eine Spalte zuviel Web Tier 4
T Richtige Aussgabe in eine HTML mit JSF Web Tier 2
S Auswahl eine Zeile von einer HTML Tabelle im Servlet Web Tier 4
C Aktualisieren eine Tabelle mit OnetoMany-Beziehuung Web Tier 6
Scorpi41 RequestDispatcher eine anderes Projekt zugreifen Web Tier 8
C GWT: Eine Variable in allen Widgets Web Tier 6
M JSF: Bei Seitenaufruf eine Methode starten Web Tier 15
I Eine Bean von einer anderen Bean aufrufen Web Tier 2
L Unter JSP eine XML Datei erstellen Web Tier 3
I Export in eine CSV - Datei und PDF Web Tier 5
2 Pro Action nur eine ActionForm? Web Tier 4
H Gibt es für das message-bundle eine Standard - Ordnung? Web Tier 2
B Bei eine eienen Tag auf einen Parent zugreifen. Web Tier 3
S nur eine Message auf Faceskontext ausgeben Web Tier 2
O eine .do-File als welcome-file im web.xml Web Tier 4
T Was nehmen für eine Datenbankapplikation mit Webinterface Web Tier 5
G Eine Instanz pro Managed Bean? Web Tier 2
F Beim Aufruf von einer JSF Seite eine Methode ausführen Web Tier 9

Ähnliche Java Themen

Neue Themen


Oben