JSF - Endung .faces und .jsp

Status
Nicht offen für weitere Antworten.

miketech

Bekanntes Mitglied
Hi zusammen,

ich hab ein kleines Verständnisproblem mit JSF:

Ich hab die Default-Einstellungen übernommen, dass Dateien mit der Endung ".faces" vom Faces Servlet bearbeitet werden.

Ich habe nun mehrere Dateien:

index.jsp
home.jsp

usw.

Interessanterweise kann ich die URLs nur mit home.faces z.B. aufrufen, da es sonst Fehler gibt. Ist soweit verständlich, weil es ja vom Faces Servlet bearbeitet werden soll.

Allerdings habe ich nie gesehen, dass ich bei irgendeiner Webanwendung eine URL aufrufen musste, die mit .faces endet.

Wie mache ich das denn üblicherweise? Kann ich nicht auch die .jsp Dateien irgendwie aufrufen?

Interessant ist dann wieder, dass ich in der faces-config für die Navigation dennoch die Dateien mit der Endung .jsp angebe.

Vielleicht kann mir jemand sagen, ob das denn alles so richtig ist :)

Gruß

Mike
 

Kotelette

Mitglied
Diese Einstellung wird über die web.xml vorgenommen die dann meistens wie folgt aussieht (mit der myfaces-Implementierung von Apache):
Code:
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
	<servlet>
	<servlet-name>Faces Servlet</servlet-name>
	<servlet-class>org.apache.myfaces.webapp.MyFacesServlet</servlet-class>
	<load-on-startup></load-on-startup>
	</servlet>	
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.faces</url-pattern>
	</servlet-mapping>
</web-app>
Das ist aus alles richtig so, ich denke der Grund für dieses Verhalten liegt irgendwo intern in den JSF-Spezifikationen.
Wenn man eine Seite mit der Endung .faces auffruft wird ja ein FacesContext angelegt (vergleichbar mit einem Http-Session Objekt).

Die einfachste Abhilfe ist eine ganz simple Seite index.jsp anzulegen, die nichts anderes macht, als auf deine eigentliche Startseite weiterzuleiten.
index.jsp (welcome.jsp wäre dann Deine eigentliche Startseite):
<html>
<body>
<jsp:forward page="welcome.faces" />
</body>
</html>
Dann kannst Du auch einfach nur noch dein Webroot angeben und der Server wird Dich automatisch auf die welcome.jsp weiterleiten.
Die nachfolgenden Seiten werden dann ja mit Hilfe der Navigationsregeln in der faces-config.xml angesprungen :toll:
 

miketech

Bekanntes Mitglied
D.h. dass ich für jede Seite, die man vielleicht direkt anspringen können soll eine jsp Seite mit Weiterleitung anlegen sollte? Oder ich gebe dann halt doch die URL mit .faces weiter, wenn eine bestimmte Seite angesprungen werden soll.

Gruß

Mike
 

Kotelette

Mitglied
Hab's gerade kurz ausprobiert...
Es ist genauso, wie Du es vermutest, der URL muss mit der Endung .faces statt .jsp angegeben werden, ansonsten fängt man sich eine NullPointerException mit dem Grund: "Faces context not found"
Gebe ich aber "localhost:8080/welcome.faces" in die Addressleiste meines Browsers ein klappts wunderbar :)

Also bräuchstest Du nicht für jede Seite eine Weiterleitungsseite extra, sonder würdest die Zielangabe in einem Link einfach so angeben:
Zum Start
 

miketech

Bekanntes Mitglied
Hm ja, ok. Hab ich nur noch nie in der Praxis gesehen. Aber man könnte ja aus .faces ja einfach .jhtml machen und schon sieht das wieder sehr neu und geheimnisvoll aus ;)

Gruß

Mike
 

HLX

Top Contributor
miketech hat gesagt.:
Allerdings habe ich nie gesehen, dass ich bei irgendeiner Webanwendung eine URL aufrufen musste, die mit .faces endet.

Wie mache ich das denn üblicherweise?
Das was oben beschrieben wurde (web.xml) ist ein gewöhnliches Servlet-Mapping, das kannst du x-beliebig oft für jedes Servlet anlegen.

Mit...
Code:
<servlet-mapping> 
      <servlet-name>Faces Servlet</servlet-name> 
      <url-pattern>*.jsp</url-pattern> 
   </servlet-mapping>
...gehen auch die JSPs über das FacesServlet.

miketech hat gesagt.:
Interessant ist dann wieder, dass ich in der faces-config für die Navigation dennoch die Dateien mit der Endung .jsp angebe.

Wie soll JSF sonst die Unterscheidung vornehmen?
 

miketech

Bekanntes Mitglied
Hi,

ich habe nun gesehen, dass es auch eine Einstellung dafür gibt, welche Endung die Dateien haben, die das Faces Servlet anzeigt. D.h. ich kann selbst entscheiden, ob wenn ich meinedatei.faces aufrufe, die Datei mit dem Code meinedatei.jsp, oder meinedatei.whatever heißt.

Das war mir nicht ganz klar, aber nun ist es ok.

Setze ich das Mapping auf .jsp Dateien, dann werden aber auch JSP-Dateien, die kein JSF beinhalten vom Faces Servlet bearbeitet.

Aber ok, ich wollte ja nur wissen, ob ich alles richtig mache und offensichtlich mache ich das :)

Danke und Gruß

Mike
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben