ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
7192
7192
EMPFEHLEN
-
27.03.08 18:14 #1
- Registriert seit
- Aug 2007
- Beiträge
- 15
Hi all,
vorab : ich bin relativ neu in JSF/Faclets/etc..... .
Naja, also ich will eigenlich nur ein Property eine Managed Bean setzen und bekomme es nicht hin. es wäre nett wenn Ihr mir helfen könnt.
Folgendes habe ich gemacht :
Ich habe mir ein kleine Klasse mit einer einzigen Property erstellt. zu der Property dann auch getter und setter definiert. Zusätzlich habe ich während meiner versuche zwei Funktionen ergänzt.
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
package com.antoniushof.navigation; public class MainNavigation { private String currentNavigation; public MainNavigation(){ super(); } public String getCurrentNavigation() { return currentNavigation; } public void setCurrentNavigation(String currentNavigation) { this.currentNavigation = currentNavigation; } public void navigate(String target){ this.currentNavigation = target; } public String test(){ this.currentNavigation = "Das ist ein Test"; return "sucess"; } }
Dann habe ich die Klasse über die faces-config.xml mit demJSF verbunden :
HTML-Code:<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN" "http://java.sun.com/dtd/web-facesconfig_1_0.dtd"> <faces-config> <managed-bean> <description> Dies Klasse hilft die Navigation zu verwirklichen </description> <managed-bean-name>MainNav</managed-bean-name> <managed-bean-class>com.antoniushof.navigation.MainNavigation</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <application> <locale-config> <default-locale>de</default-locale> </locale-config> <view-handler>com.sun.facelets.FaceletViewHandler</view-handler> </application> </faces-config>
Und in meiner "body.xhtml" Datei kann ich so das Property auch auslesen :
Aber das setzen der Property über ein commandlink o.ä. bekomme ich einfach nicht hin.HTML-Code:<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" > <head></head> <body> <p>Das ist ein Test :</p> <p>#{MainNav.currentNavigation}</p> </body> </html>
bis jetzt habe ich es so versucht (zumindes iast das der letzte stand):
Der Link "Body2" mit der action "Test" geht, also scheint die Verknüpfung ok zu sein.HTML-Code:<jsp:root xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:jsp="http://java.sun.com/JSP/Page"> <head></head> <body> <h:form> <h:commandLink action="#{MainNav.setCurrentNavigation}"> <h:outputText value="Body1"/> <f:param name="currentNavigation" value="body1.xhtml" /> </h:commandLink> <br/> <h:commandLink action="#{MainNav.test}"> <h:outputText value="Body2"/> </h:commandLink> </h:form> </body> </jsp:root>
aber bei dem Link "Body1" bekomme ich folgende Fehlermeldung :
Soweit ich es verstanden habe schafft er nicht den Parameter für die Funktion zu übergeben, dadurch ist die Funktionssignatur verschieden, und er findet die Funktion nicht.Code :1 2
javax.servlet.ServletException: #{MainNav.setCurrentNavigation}: javax.el.MethodNotFoundException: /WEB-INF/Templates/navigation.xhtml @10,62 action="#{MainNav.setCurrentNavigation}": Method not found: com.antoniushof.navigation.MainNavigation@1be4777.setCurrentNavigation() javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)
Den Parameter zu übergeben habe ich auch schon per <f:commandButton> probiert, und auch als "value" im commandlink tag und noch ein wenig mehr.
Es wäre schön wenn mir jemand sagen könnte wie ich das Property richtig setzen kann.
Vielen Dank für eure mühe im Voraus.
Beste Grüße
Karl
-
28.03.08 10:18 #2Frozenlife Tutorials.de Gastzugang
Ich weiß zwar nicht obs dir weiterhilf, aber hast du evtl. <f:view> vergessen (glaube das ist beim Tag f dabei). Das musst du normalerweise fast immer schreiben wenn du mit JSF arbeitest (glaub ich mal).
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
<jsp:root xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:jsp="http://java.sun.com/JSP/Page"> <head></head> <body> [B] <f:view>[/B] <h:form> <h:commandLink action="#{MainNav.setCurrentNavigation}"> <h:outputText value="Body1"/> <f:param name="currentNavigation" value="body1.xhtml" /> </h:commandLink> <br/> <h:commandLink action="#{MainNav.test}"> <h:outputText value="Body2"/> </h:commandLink> </h:form> [B] </f:view>[/B] </body> </jsp:root>
mfg
-
28.03.08 11:20 #3
- Registriert seit
- Aug 2007
- Beiträge
- 15
Hi Frozenlife,
Danke für dein Antwort. Irgendwie wunder es mich schon ein wenig, dass ich der Einzigste bin der eine Property einer Managed Bean ändern will.
Naja, leider hat dein Vorschlag nicht das Problem gelöst, aber ich habe gerade eben eine alternative gefunden und ausprobiert (siehe Andere Möglichkeit).
Und der sort beschriebene zweite weg hat gut funktioniert.
Ich fasse das mal kurz zusammen was ich gemacht habe:
In der Klasse/Managed-Bean habe ich eine Funktione hinzugefügt die ich zum setzen der Propertys verwenden.
Code java:1 2 3 4 5
public void callSetter(ActionEvent event) { UIParameter component = (UIParameter) event.getComponent().findComponent("currentNavigation"); this.currentNavigation = component.getValue().toString(); }
Und in der JSF Datei habe ich den commandLink folgendemaßen angepasst :
Und wenn ich andere Propertys verarbeiten will so muss ich die nur in der neuen Funktion der Klasse hinzufügen.HTML-Code:<h:commandLink actionListener="#{MainNav.callSetter}"> <h:outputText value="Body1"/> <f:param id="currentNavigation" value="Body1"></f:param> </h:commandLink>
Ich weiss nicht ob das so die "übliche" Lösung ist, aber für mich reicht es fürs erste.
Danke und Gruß
Karl
-
28.03.08 14:53 #4
- Registriert seit
- Aug 2007
- Beiträge
- 15
NACHTRAG :
also in der gerade geposteten Lösung gibt es das Problem das man die ID im param nur 1x vergeben darf. Vergibt man andere IDs so findet man aber diese in der Bean nicht wieder.
Das Ganze habe ich jetzt etwas angepasst. Das grundprinzip bleib aber gleich.
Also in der JSF-Datei muss der Command jetzt so aussehen :
(aus <f : para> wird <f : attribute>)HTML-Code:<h:form> <h:commandLink value="#{x}" actionListener="#{MainNav.callSetter}"> <f:attribute name="test" value="#{x}" /> </h:commandLink> </h:form>
Und der ActionListener in der Bean muss dann so aussehen :
wie man sehen kann, kann man dan ganz bequem über eine aufruf die Attribute per name holen.Code java:1 2 3 4
public void callSetter(ActionEvent event) { this.currentNavigation = event.getComponent().getAttributes().get("test").toString(); }
Gruß
Karl
-
28.03.08 17:07 #5Frozenlife Tutorials.de Gastzugang
Das ist komisch...Ich habe bis jetzt alles Lösungen gesehen, wie du sie gemacht hasst. Also mit param (und auch mehrmals). Deswegen wundere ich mich warum das nicht gehen sollte. Aber danke für die Antwort, vielleicht werd ichs mal brauchen. Jetzt fang ich aber bald mit EJB 3 an. Das soll sogar nur auf dem Tomcat (ohne JBoss) laufen.
Ähnliche Themen
-
Redirecting in Schleife from Jsf Managed Bean
Von maddos im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 4Letzter Beitrag: 06.08.10, 14:14 -
Property einer Bean auf Property einer anderen Bean setzen?
Von DarthShader im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 6Letzter Beitrag: 22.09.08, 19:54 -
<bean:message>-Tag in <bean:write>-Tag?
Von klaeuschen41 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 3Letzter Beitrag: 11.04.06, 11:52 -
Property will nicht im Property-Fenster erscheinen
Von yesso im Forum .NET ArchivAntworten: 2Letzter Beitrag: 29.03.05, 19:14 -
VisualStudio Setup Property ALLUSÈRS auf 1 setzen?
Von GünterS im Forum VisualStudio & MFCAntworten: 0Letzter Beitrag: 10.03.05, 15:23





Zitieren
Login





