JSF模板文件的明确目录

问题描述:

我刚刚进入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> 

感谢您的帮助!

没有办法。我希望有一种方法,因为通过将它们隐藏在/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