Die zu verwendende URL zu link / Navigation JSF-Seiten
Ich bin verwirrt darüber, wie Links zwischen Dateien in einer Java-Server-Faces-Projekt, wenn einige der Dateien sind in den Unterordnern. (Ich werde screenshots Anhängen, so dass Sie sehen können, die Nebeans Projekt anzeigen, und Dateien Blick auf das Beispiel, das ich versuche.... aber ich bin nicht erlaubt, um Bilder hinzuzufügen, noch).
Ich mein Beispiel-Projekt, an dem ich Dateien namens "index.xhtml" und "berechnen/berechnen.xhtml". Ich habe auch eine Datei namens "template.xhtml", die verwendet wird. Die Frage ist, was url-format in die Vorlage, die Arbeit wird für beide Dateien.
Gerade In html würde ich nur etwa den folgenden verwenden, um einen link zurück auf die Startseite, die Arbeit von jedem beliebigen Ort aus:
<a href="/index.html">Home</a>
Aber ich kann nicht herausfinden, was zählt als root-Ordner für eine JSF-Anwendung, und ob die "Projekt-Ansicht" Ordner-Struktur oder die "Liste Dateien" - Ordner-Struktur.
<ui:include src="...">
in Kombination mit <ui:insert name="...">
. Es macht keinen Unterschied in der Ziel-URL, durch die ein client kann die Anforderung der Ressource im Zusammenhang mit dieser URL. Was den Unterschied merken Sie beim verschieben zu JSF?In meinem template, wenn ich die folgende Zeile verwenden:
In meinem template, wenn ich
<a href="/index.xhtml" ..
dann glassfish server denkt, es ist http://localhost:8080/index.xhtml
. Allerdings, wenn ich <a href="index.xhtml" ..
dann die index-Datei wird erwartet, dass im gleichen Verzeichnis wie die xhtml-Datei ...also ich bin verwirrt, was zu tun istInformationsquelleAutor Ant Waters | 2015-06-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst JSF ist ein HTML-code-generator. So ist es nicht unterschiedlich in JSF als in "einfachen" HTML-Code. Man sollte Sie nur nicht anschauen, Datei-system-Struktur in der webapp-Projekt bei der Erstellung von hyperlinks in HTML. Sie sollten sich auf die öffentliche URL-Struktur dieser Ressourcen. Es ist nämlich dem webbrowser, wer hat das aufrufen und laden Sie diese Ressourcen, nicht der webserver. Der webbrowser weiß absolut gar nichts über die Struktur des Dateisystems auf dem webserver. Dies ist nicht spezifisch für JSF-Projekte. Dies gilt für alle web-Projekte.
Relative URLs sind nicht relativ zu deren Position in der Datei-system-Struktur in der webapp-Projekt. Sie sind relativ zu der Anfrage-URL der aktuell geöffneten HTML-Dokument, genau das sehen Sie im browser die Adresse bar. Angemerkt sollte werden, dass wenn ein
<base>
- element wird im HTML-Dokument vorhanden, dann alle relativen URLs im HTML-Dokument beginnt nicht mit/
wird relativiert.Gegeben, eine webapp, die so konfiguriert ist, mit
FacesServlet
- mapping URL-pattern von*.xhtml
, und wird eingesetzt umlocalhost:8080
mit Kontext Pfad/context
die URL einer/index.xhtml
- Datei in project web root wie folgt:Wenn Sie gerade in
http://localhost:8080/context/index.xhtml
wird, und Sie möchten einen link erstellen, der zuhttp://localhost:8080/context/calculate/calculate.xhtml
ist, dann werden alle Möglichkeiten unten wird letztlich zeigen Sie auf genau die gleiche absolute URL.Einer relativen URL, beginnend mit
//
ist relativ zu der aktuellen Regelung.Einer relativen URL, beginnend mit
/
ist relativ zu der Domäne.Einen relativen URL nicht beginnend mit
/
relativen Pfad.Und wenn Sie gerade in
http://localhost:8080/context/calculate/calculate.xhtml
wird, und Sie möchten einen link zuhttp://localhost:8080/context/index.xhtml
, dann gelten die gleichen Regeln:Einer relativen URL, beginnend mit
//
ist relativ zu der aktuellen Regelung.Einer relativen URL, beginnend mit
/
ist relativ zu der Domäne.Einen relativen URL nicht beginnend mit
/
relativen Pfad.Als Sie wissen wahrscheinlich jetzt, eine relative URL, beginnend mit
/
ist nicht abhängig von den aktuellen Pfad und die Domäne. So, das ist die URL, die Sie wirklich wollen, um überall in Ihrem web-Anwendung, ohne sich Gedanken über Wartung, Probleme beim Wechsel der domain oder verschieben von Dateien auf dem server. Das einzige, was Links ist die dynamicness der Kontext-Pfad. Sie wissen wahrscheinlich bereits, dass dieser Wert ist nicht steuerbar von innen die webapp. Sie würde wirklich gerne vermeiden hartzucodieren. Sie können jedoch leicht lassen JSF drucken Sie es programmgesteuert mit ein wenig Hilfe von EL. Es ist nämlich nur verfügbar, vonHttpServletRequest#getContextPath()
und dieHttpServletRequest
ist in EL erhältlich als implizite Objekt#{request}
.Wird es nur noch mühsam, Sie zu wiederholen Sie dies jedes mal. Zum Glück, JSF bietet die
<h:link>
- Komponente für den Zweck der Erzeugung einer HTML -<a>
element mit dem aktuellen Kontext-Pfad automatisch inline.Beachten Sie, dass die
outcome
darstellen muss eine JSF view-ID, die nicht notwendigerweise identisch mit dem URL-Pfad (es sein wird, wenn Sie die KarteFacesServlet
auf*.xhtml
). Sie können sogar weglassen, wird die Datei-Erweiterung hier, JSF automatisch erkennen es als Teil der "implizite navigation" - Mechanismus.Siehe auch:
href="#{request.contextPath}/index.xhtml"
vor nicht wirklich verstehen, was es macht, und ich denke, etwas anderes war damals falsch. Jedenfalls funktioniert es jetzt, vielen Dank.Du bist herzlich willkommen. Es ist nicht genau JSF. Es ist nur HTTP und HTML. Wissen HTTP und HTML ist zwar eine Voraussetzung, bevor Sie Tauchen in JSF. Lernen JSF ist in diesem speziellen Fall zu wissen, den Zweck der
<h:link>
und#{request.contextPath}
(obwohl letzteres ist ein Servlet - +EL-spezifischen als JSF-spezifisch).InformationsquelleAutor BalusC