2010-07-21 3 views
3

Je suis en train de me lancer dans le développement de Seam/JSF et de trouver un moyen de rechercher les fichiers de gabarit XHTML à partir d'un emplacement différent.Répertoire explicite pour les fichiers de gabarit JSF

Lors de la configuration de l'application JSF comme ceci:

<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.seam</url-pattern> 
</servlet-mapping> 

<context-param> 
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
    <param-value>.xhtml</param-value> 
</context-param> 

quand je rentre dans une URL comme:

http://localhost/test.seam 

Le système charge le fichier XHTML à

<webapp>/test.xhtml 

Qu'est-ce que je d aime configurer est un répertoire préfixe, de sorte que le fichier est recherché à partir

<webapp>/WEB-INF/views/test.xhtml 

Alors, est-il un moyen de achive quelque chose comme ceci:

<context-param> 
    <param-name>javax.faces.DEFAULT_PREFIX</param-name> 
    <param-value>/WEB-INF/views/</param-value> 
</context-param> 

Merci pour votre aide!

Répondre

5

Il n'y a pas moyen. J'aurais aimé qu'il y ait un moyen de les empêcher d'avoir un accès direct en les cachant en /WEB-INF aurait été très utile. Je parie que c'est aussi votre exigence fonctionnelle réelle. Vous pouvez y parvenir en (ab) utilisant la sécurité déclarée gérée par conteneur. Ajouter un security-constraint sur un url-pattern de *.xhtml avec un vide auth-constraint-web.xml comme suit:

<security-constraint> 
    <display-name>Restrict direct access to XHTML files</display-name> 
    <web-resource-collection> 
     <web-resource-name>XHTML files</web-resource-name> 
     <url-pattern>*.xhtml</url-pattern> 
    </web-resource-collection> 
    <auth-constraint /> 
</security-constraint> 
+0

solution de contournement de Nice, mais je suppose que cela ne fonctionne que si le servlet faces est mis en correspondance avec une extension différente de xhtml. Connaissez-vous un moyen d'y parvenir lorsque la servlet faces est mappée sur/faces ou * .xhtml? –

+1

@ Jörn: si 'FacesServlet' est mappé sur' * .xhtml', il n'y a pas de quoi s'inquiéter. Accéder à '* .xhtml' invoquerait alors' FacesServlet' ** de toute façon **;) Mais s'il est mappé sur '/ faces' alors votre seul recours est un' Filter' qui vérifie à la fois le dossier et l'extension et gère en conséquence (retour 401 ou 403). Cela ne peut pas être fait correctement en utilisant la sécurité déclarative. – BalusC