JSF und Tiles

Status
Nicht offen für weitere Antworten.
G

gast

Gast
Tag auch,

habe seit ein paar Tagen mit JSF zu tun und bin direkt auf ein paar Probleme gestoßen. Wie erzeuge ich mir Tiles und dynamische Weiterleitung in JSF OHNE mit struts zu "mischen"

Ich habe mir inzwischen diverse Artikel rausgesucht, bei dem immer nur auf letzteres eingegangen wird. Nun stellt sich mir die Frage, ob ich es überhaupt nicht in reinem JSF realieren kann.

Bei struts gäbe es doch z.B. einen globalforward im root, der eine Weiterleitung enthält. Diese wird im Action-mapping wiede aufgegriffen und erweitert meine tiles-definition um eine entsprechende Seite (i.d.R. eine WillkommensSeite im "main-frame").

Bei JSF stehe ich nun auf dem Problem, dass ich 1. nicht so recht weiß wie ich da tiles reinbekomme, weil ich zwar auch eine index-Setie im Webroot anlegen kann mit einem forward auf meine xy.faces, diese aber nicht wie bei struts entsprechend forwarden kann un eine z.B. layout.jsp-Datei erweitern kann.

Stehe da jetzt mächtig auf dem Schlauch...vielleicht kann mir da hier jemand nen Hnweis geben?!
Danke im Voraus!
 

tec1

Aktives Mitglied
Tiles geht nur mit myfaces wie das geht sollte im Netz zu genüge beschrieben sein. Dein anderes Problem verstehe ich nicht.
 
G

gast

Gast
dank dir...auf myFaces bin ich inzwischen auch gestoßen :)

Das andere Problem beschreibt den Umstand, dass ich keine dynamische Weiterleitung allein mit JSF realisieren kann. In der faces-config.xml wird für einen bestimmten navigation-case eine konkrete Weiterleitung. Bei Struts ermittelt sich dagegen der forward aus dem RÜckgabewert der Action-Methode...

Wie also kann ich mit "reinem" JSF sowas realisieren? Oder komme ich dann doch nicht um das "Vermischen" beider Technologien drum herum?
 
G

gast

Gast
dank dir...auf myFaces bin ich inzwischen auch gestoßen :)

Das andere Problem beschreibt den Umstand, dass ich keine dynamische Weiterleitung allein mit JSF realisieren kann. In der faces-config.xml wird für einen bestimmten navigation-case eine konkrete Weiterleitung. Bei Struts ermittelt sich dagegen der forward aus dem RÜckgabewert der Action-Methode...

Wie also kann ich mit "reinem" JSF sowas realisieren? Oder komme ich dann doch nicht um das "Vermischen" beider Technologien drum herum?
 

tec1

Aktives Mitglied
Ich denke, dass du die Möglichkeiten zur Navigation in JSF noch nicht wirklich überblickst. Da ich deine Frage immer noch nicht wirklich verstanden habe, kann ich dir auch nicht antworten. Ich glaube auch nicht, dass ich hier nochmal reinschauen werde, sorry. Wenn du Hilfe erwartest solltest Du deine Fragen vernünftig formulieren.

P.S. Struts und JSF zu mischen würde ich ganz schnell vergessen.
 

tec1

Aktives Mitglied
Vielleicht meinst du einen global forward, das geht in der faces config so:

<navigation-rule>
<navigation-case>
<from-outcome>error</from-outcome>
<to-view-id>/pages/common/error.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
 
G

gast

Gast
tec1 hat gesagt.:
Vielleicht meinst du einen global forward, das geht in der faces config so:

<navigation-rule>
<navigation-case>
<from-outcome>error</from-outcome>
<to-view-id>/pages/common/error.xhtml</to-view-id>
</navigation-case>
</navigation-rule>


na genau darum gehts doch :)
bisher kenne ich nur den oben beschriebenen weg. will ich jetzt aber keine feste weiterleitung (in dienem fall zu error.xhtml), sondern eine "dynamisch" (z.B. in Abhängigkeit meiner methode) weiß ich nicht was ich eintragen müsste...
 
G

Gast

Gast
Versuche es doch mal mit:
Code:
FacesContext context = FacesContext.getCurrentInstance();
context.getApplication().getNavigationHandler().handleNavigation(context, null, "error");
 
G

gast

Gast
Das sieht mir doch schwer nach nem Volltreffer aus :)

Ich probier damit gleich mal ein bisserl rum...danke schon im mal im Voraus!
 
G

Guest

Gast
da habe ich mich heute mit großer erwartung meinem JSF-Projekt gewidmet und bin doch direkt vor die Wand gelufen :(

Folgende Exception erhalte ich wenn ich meinen Button drücke:
SCHWERWIEGEND: login: de.onlineboerse.ui.UserLogin.login(javax.faces.event.ActionEvent)
javax.faces.el.MethodNotFoundException: login: de.onlineboerse.ui.UserLogin.login(javax.faces.event.ActionEvent)
at com.sun.faces.el.MethodBindingImpl.method(MethodBindingImpl.java:206)
at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:124)
at javax.faces.component.UICommand.broadcast(UICommand.java:305)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:267)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:381)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:75)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2416)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:601)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:534)




der dazugehörige JSP-Ausschnitt:
Code:
<tr>
			<td width="520" align="center" style="border-left:solid 1px silver;border-right:solid 1px silver;border-top:solid 1px silver;border-bottom:solid 1px white;background-color:#ffffff;color:#89A9B8;height:32">
					<h:outputText value="Login:" />&<h:inputText value="#{userLoginBean.user}"/>&&<h:outputText value="Passwort:" />&<h:inputSecret value="#{userLoginBean.password}"/>&&<h:commandButton action="loginSuccess" actionListener="#{userLoginBean.login}" value="Login"></h:commandButton>
			</td>
		</tr>


die Bean-Methode "login":
Code:
public void login(FacesEvent event){
    String forward = "";
    
    if(2==2){
      forward="loginSuccess";
    }
    
    FacesContext context = FacesContext.getCurrentInstance();
    context.getApplication().getNavigationHandler().handleNavigation(context,null,forward);
  }




und schließlich die faces-config:
Code:
<navigation-rule>
		<description>Login</description>
		<from-view-id>/oben.jsp</from-view-id>
		<navigation-case>
			<from-outcome>loginSuccess</from-outcome>
			<to-view-id>/jsp/navigation/obenEingeloggt.jsp</to-view-id>
		</navigation-case>
		<navigation-case>
			<from-outcome>loginFailure</from-outcome>
			<to-view-id>/jsp/general/loginFailure.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>


Kann mir hierzu jemand weiterhelfen?
 
G

Gast

Gast
oder so:

public String login(){
String forward = "";

if(2==2){
forward="loginSuccess";
}
return forward;
}


so soll es sicherlich klappen ...
 
G

Gast

Gast
bringt nichts :(
Fehlermeldung bleibt gleich:

javax.faces.el.MethodNotFoundException: login: de.onlineboerse.ui.UserLogin.login(javax.faces.event.ActionEvent)
at com.sun.faces.el.MethodBindingImpl.method(MethodBindingImpl.java:206)

wobei ich mich dabei schon frage, wieso er eine Methode mit dem Parameter ActrionEvent erwartet...
 

KSG9|sebastian

Top Contributor
Änder den Parameter
Code:
public void login(javax.faces.event.ActionEvent event){ 
String forward = ""; 

if(2==2){ 
forward="loginSuccess"; 
} 

FacesContext context = FacesContext.getCurrentInstance(); 
context.getApplication().getNavigationHandler().handleNavigation(context,null,forward); 
}

?!
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben