Jsf 2 如何在2.0中隐藏JSF导航处理程序对URL的访问
我有一个web应用程序,它包含Tomcat6.0和JSF2.0以及RichFaces4.0.0 Final 我的所有页面都带有扩展名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
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运行时才可用