Les url ne sont pas résolus basé sur la structure de fichiers du serveur. Les url sont résolus basé sur le public réel des adresses web des ressources en question. C'est à savoir le webbrowser qui a obtenu pour les invoquer, pas le serveur.
Il existe plusieurs façons pour adoucir la douleur:
JSF EL offre une abréviation pour ${pageContext.request}
dans la saveur de l' #{request}
:
<li><a href="#{request.contextPath}/index.xhtml">Home</a></li>
<li><a href="#{request.contextPath}/about_us.xhtml">About us</a></li>
Vous pouvez, si nécessaire, d'utiliser <c:set>
balise pour le rendre encore plus courte. Mettre quelque part dans le modèle master, il sera disponible pour toutes les pages:
<c:set var="root" value="#{request.contextPath}/" />
...
<li><a href="#{root}index.xhtml">Home</a></li>
<li><a href="#{root}about_us.xhtml">About us</a></li>
JSF 2.x vous offre l' <h:link>
, ce qui peut prendre une identification par rapport à la racine de contexte en outcome
, et il va ajouter le chemin de contexte et d' FacesServlet
cartographie automatiquement:
<li><h:link value="Home" outcome="index" /></li>
<li><h:link value="About us" outcome="about_us" /></li>
HTML offre l' <base>
balise qui permet à tous les Url relatives dans le document relatif à cette base. Vous pourriez faire usage de. Le mettre dans l' <h:head>
.
<base href="#{request.requestURL.substring(0, request.requestURL.length() - request.requestURI.length())}#{request.contextPath}/" />
...
<li><a href="index.xhtml">Home</a></li>
<li><a href="about_us.xhtml">About us</a></li>
(note: ceci nécessite EL 2.2, sinon vous feriez mieux d'utiliser JSTL fn:substring()
, voir aussi cette réponse)
Cela devrait se terminer dans le code HTML généré quelque chose comme
<base href="http://example.com/webname/" />
Notez que l' <base>
balise a un inconvénient: il fait tout sauter les ancres dans la page comme d' <a href="#top">
par rapport à celui-ci! Voir aussi Est-il recommandé d'utiliser le <base> balise html? Dans JSF-vous capable de le résoudre comme <a href="#{request.requestURI}#top">top</a>
ou <h:link value="top" fragment="top" />
.