JSF gibt leer/nicht geparste Seite mit plain/raw XHTML/XML/EL Quelle anstelle von gerenderten HTML-Ausgabe
Habe ich einige Facelets-Dateien wie unten.
WebContent |-- index.xhtml |-- register.xhtml |-- templates | |--userForm.xhtml | `--banner.xhtml :
Beide Seiten sind mit Hilfe von Vorlagen aus /templates
- Verzeichnis. Meine /index.xhtml
öffnet sich Prima im browser. Bekomme ich den generierten HTML-Ausgabe. Ich habe einen link in /index.xhtml
Datei zu /register.xhtml
- Datei. Aber, meine /register.xhtml
ist nicht immer geparst und gibt als einfache XHTML - /XML-Rohdaten, statt dessen generiert die HTML-Ausgabe. Wenn ich Rechtsklick-Seite im browser und tun Quelltext der Seite Ansehen, dann sehe ich immer noch die XHTML-Quellcodes der generierten HTML-Ausgabe. Es sieht aus wie die Vorlage, ist nicht immer angewendet.
Allerdings, wenn ich öffnen Sie die /register.xhtml
wie /faces/register.xhtml
im browser in der Adressleiste, dann wird es korrekt angezeigt. Wie wird das verursacht und wie kann ich es lösen?
InformationsquelleAutor BlueBird | 2010-06-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es drei hauptsächliche Ursachen.
FacesServlet
wird nicht aufgerufen.1. Stellen Sie sicher, dass die URL passt
FacesServlet
mappingDie URL den link (die URL, die Sie sehen im browser die Adresse bar) hat, um die
<url-pattern>
desFacesServlet
wie definiert inweb.xml
um alle zu erhalten, die JSF-Werke zu führen. DieFacesServlet
ist der verantwortliche für das Parsen von XHTML-Datei, sammeln vorgelegten form die Werte, die Durchführung der Konvertierung/Validierung, Aktualisierung Modelle, aufrufen von Aktionen und generieren der HTML-Ausgabe. Wenn Sie nicht aufrufen, dieFacesServlet
durch die URL, dann alles, was Sie bekommen würde (und sehen über Rechtsklick, View Source im browser) ist in der Tat die raw-XHTML-Quellcode.Wenn die
<url-pattern>
ist zum Beispiel*.jsf
, dann wird der link zeigen sollte, zu/register.jsf
und nicht/register.xhtml
. Wenn es zum Beispiel/faces/*
, wie Sie haben, dann wird der link zeigen sollte, zu/faces/register.xhtml
und nicht/register.xhtml
. Ein Weg, um dies zu vermeiden Verwirrung ist einfach nur die<url-pattern>
aus/faces/*
zu*.xhtml
. Das unten ist also das ideale mapping:Wenn Sie können nicht ändern die
<url-pattern>
zu*.xhtml
aus irgendeinem Grund, dann haben Sie wahrscheinlich möchte auch verhindern, dass Endkunden der aus Sie direkt Zugriff auf XHTML-Quellcode-Dateien von URL. In diesem Fall können Sie eine<security-constraint>
auf die<url-pattern>
von*.xhtml
mit einem leeren<auth-constraint>
imweb.xml
die verhindert, dass:Den kommenden JSF 2.3 wird die Lösung für alle der oben genannten durch die automatische Registrierung der
FacesServlet
auf ein URL-Muster der*.xhtml
während der webapp zu starten.Siehe auch:
2. Stellen Sie sicher, dass XML-Namensräume entsprechen JSF-version
Seit der Einführung von JSF 2.2, eine weitere mögliche Ursache ist, dass XML-namespaces, die nicht mit der JSF-version. Die
xmlns.jcp.org
wie unten ist neu seit JSF 2.2 und funktioniert nicht in älteren JSF-Versionen. Die Symptome sind fast die gleichen, als wenn dieFacesServlet
wird nicht aufgerufen.Wenn Sie nicht ein upgrade auf JSF 2.2, dann müssen Sie den alten
java.sun.com
XML-namespaces statt:Siehe auch:
3. Mehrere JSF-Implementierungen wurden geladen
Eine weitere mögliche Ursache ist, dass mehrere JSF-Implementierungen geladen wurden, indem Sie Ihre webapp, widersprüchliche und beschädigen sich gegenseitig. Zum Beispiel, wenn Sie Ihre webapp runtime classpath ist verschmutzt mit mehreren verschiedenen versionierten JSF-Bibliotheken, oder in der Mojarra 2.x + Tomcat 8.x Kombination, wenn es eine unnötige
ConfigureListener
Eintrag in der webapp istweb.xml
was es zweimal geladen.Bei der Verwendung von Maven, stellen Sie unbedingt sicher, dass Sie erklären die Abhängigkeiten der richtige Weg ist und dass Sie verstehen, dependency scopes. Importantingly, nicht die bundle-Abhängigkeiten in der webapp, wenn diese bereits durch die Ziel-server.
Siehe auch:
Stellen Sie sicher, dass Sie lernen, JSF den richtigen Weg
JSF hat eine sehr steile Lernkurve für diejenigen, die nicht vertraut mit grundlegenden HTTP, HTML und Servlets. Es gibt eine Menge von geringer Qualität-Ressourcen über das Internet. Bitte ignorieren-code-snippet, Schaben verwaltete Websites, die von Amateuren mit Schwerpunkt auf Werbung Einkommen statt auf Lehre, wie roseindia, tutorialspoint, javabeat, etc. Sie sind leicht erkennbar durch die störende Werbung links/Banner führen. Bitte auch ignorieren, Ressourcen Umgang mit jurassic JSF 1.x. Sie sind leicht erkennbar durch die Verwendung von JSP-Dateien anstelle von XHTML-Dateien. JSP als view-Technologie war veraltet seit JSF 2.0 im Jahr 2009 bereits.
Einstieg den richtigen Weg starten Sie bei unsere JSF-wiki-Seite und um eine maßgebliche Buch.
Siehe auch:
Dank BalusC. Ich werde versuchen, dies hin und zurück, um Sie. Keep in touch.
Hallo Ihr lieben, Nun habe ich meine Verbindung mit <h:link /> - tag. Die links funktionieren einwandfrei. Ich habe noch eine Frage. Der link wird automatisch in /Gesichter/registrieren.xhtml . Gibt es irgendeine Möglichkeit, dass ich ausblenden /faces/ Verzeichnis und der link muss angezeigt /registrieren.xhtml ohne die "Gesichter" - Verzeichnis???
Ah, bist du mit Präfix-mapping
/faces/*
, Nein das kannst du nicht verbergen. Mit extension-mapping wie*.jsf
,*.faces
oder sogar*.customextension
.Ersetzen
/faces/*
durch*.jsf
alsurl-pattern
vonFacesServlet
.InformationsquelleAutor BalusC