# JSF und Tiles



## gast (9. Aug 2006)

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 (9. Aug 2006)

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


----------



## gast (10. Aug 2006)

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?


----------



## gast (10. Aug 2006)

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 (13. Aug 2006)

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 (13. Aug 2006)

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>


----------



## gast (14. Aug 2006)

tec1 hat gesagt.:
			
		

> Vielleicht meinst du einen global forward, das geht in der faces config so:
> 
> <navigation-rule>
> <navigation-case>
> ...




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...


----------



## Gast (15. Aug 2006)

Versuche es doch mal mit:

```
FacesContext context = FacesContext.getCurrentInstance();
context.getApplication().getNavigationHandler().handleNavigation(context, null, "error");
```


----------



## gast (15. Aug 2006)

Das sieht mir doch schwer nach nem Volltreffer aus 

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


----------



## Guest (16. Aug 2006)

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:

```
<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":
	
	
	
	





```
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:
	
	
	
	





```
<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?


----------



## Gast (16. Aug 2006)

versuch es mit der Methode login aber ohne Eingabeparameter..


----------



## Gast (16. Aug 2006)

oder so:

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

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


 so soll es sicherlich klappen ...


----------



## Gast (16. Aug 2006)

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 (16. Aug 2006)

Änder den Parameter

```
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); 
}
```

?!


----------



## Gast (16. Aug 2006)

hätte man irgendwie drauf kommen können - danke


----------

