2010-07-21 93 views
3

我剛剛進入Seam/JSF開發並尋找從另一個位置查找XHTML模板文件的方法。JSF模板文件的明確目錄

在配置JSF應用程序是這樣的:

<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> 
當我進入

像一個網址:

http://localhost/test.seam 

系統加載在

<webapp>/test.xhtml 

我」什麼的XHTML文件d想要配置的是前綴目錄,因此該文件正在從

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

那麼,有沒有什麼辦法才達到這樣的事:

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

感謝您的幫助!

回答

5

沒有辦法。我希望有一種方法,因爲通過將它們隱藏在/WEB-INF中來阻止他們直接訪問會非常有用。我敢打賭,這也是你的實際的功能需求。您可以通過(ab)使用聲明性容器管理的安全性來實現此目的。添加上的*.xhtmlurl-pattern一個security-constraint一個空auth-constraintweb.xml喜歡如下:

<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

不錯的解決方法,但我想這隻能如果臉部的servlet映射到從XHTML不同的擴展。當面部servlet映射到/ faces或* .xhtml時,你知道有什麼辦法可以實現嗎? – 2010-07-21 12:18:56

+1

@Jörn:如果'FacesServlet'被映射到'* .xhtml',沒有什麼可擔心的。訪問'* .xhtml'然後會以任何方式調用'FacesServlet' ** **)但是如果它被映射到'/ faces',那麼你唯一的手段就是一個'Filter',它將檢查文件夾和擴展名並相應地處理返回401或403)。使用聲明性安全措施無法做到這一點。 – BalusC 2010-07-21 12:37:19