Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 如何在2.0中隐藏JSF导航处理程序对URL的访问_Jsf 2_Tomcat6 - Fatal编程技术网

Jsf 2 如何在2.0中隐藏JSF导航处理程序对URL的访问

Jsf 2 如何在2.0中隐藏JSF导航处理程序对URL的访问,jsf-2,tomcat6,Jsf 2,Tomcat6,我有一个web应用程序,它包含Tomcat6.0和JSF2.0以及RichFaces4.0.0 Final 我的所有页面都带有扩展名xhtml 我在faces config.xml中的所有导航都带有.xhtml扩展名 当前,浏览器显示整个url,其中包含FacesServlet导航到的文件的扩展名.xhtml 我只想为所有导航显示基本URL,如localhost:8080/appname 这是可能的吗?是的,如果您将所有静态内容(如图像、样式表、Java脚本等)放在一个固定的公共文件夹中(如/s

我有一个web应用程序,它包含Tomcat6.0和JSF2.0以及RichFaces4.0.0 Final

我的所有页面都带有扩展名
xhtml

我在
faces config.xml
中的所有导航都带有
.xhtml
扩展名

当前,浏览器显示整个url,其中包含FacesServlet导航到的文件的扩展名
.xhtml

我只想为所有导航显示基本URL,如
localhost:8080/appname


这是可能的吗?

是的,如果您将所有静态内容(如图像、样式表、Java脚本等)放在一个固定的公共文件夹中(如
/static
/resources
/assets
等),并且如果您将
FacesServlet
本身映射到
*.xhtml>的URL模式上,这是可能的

然后,您可以创建一个
过滤器
,该过滤器映射到
/*
的URL模式上,并透明地继续所有静态内容的请求/响应链,并将剩余部分发送到
FacesServlet

String uri = ((HttpServletRequest) request).getRequestURI();

if (uri.startsWith("/static/")) {
    chain.doFilter(request, response); // Goes to default servlet.
} else {
    request.getRequestDispatcher(uri + ".xhtml").forward(request, response); // Goes to faces servlet.
}

导航处理程序不可能做到这一点,因为它必须在faces上下文中执行,而faces上下文只有在faces servlet运行时才可用。

是的,如果您将所有静态内容(如图像、样式表、javascripts等)放在固定的公用文件夹中(如
/static
/resources
)中,这是可能的,
/assets
等,如果将
FacesServlet
自身映射到
*.xhtml
的URL模式上

然后,您可以创建一个
过滤器
,该过滤器映射到
/*
的URL模式上,并透明地继续所有静态内容的请求/响应链,并将剩余部分发送到
FacesServlet

String uri = ((HttpServletRequest) request).getRequestURI();

if (uri.startsWith("/static/")) {
    chain.doFilter(request, response); // Goes to default servlet.
} else {
    request.getRequestDispatcher(uri + ".xhtml").forward(request, response); // Goes to faces servlet.
}
这对于导航处理程序是不可能的,因为它必须在faces上下文中执行,而faces上下文只有在facesservlet运行时才可用