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

发布于 2024-11-18 12:25:01 字数 325 浏览 1 评论 0原文

我有一个 Web 应用程序,其中有 tomcat 6.0 和 JSF 2.0 以及 richfaces 4.0.0 Final。

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

faces-config.xml 中的所有导航也都带有 .xhtml 扩展名。

目前,浏览器显示带有 FacesServlet 导航到的文件的 .xhtml 扩展名的整个 url。

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

这可能吗?

I have a web application which has tomcat 6.0 and JSF 2.0 with richfaces 4.0.0 Final.

All my pages are with extension xhtml.

All my navigations in the faces-config.xml is also with .xhtml extensions.

Currently the browser shows the whole url with the .xhtml extension of the file that the FacesServlet navigates to.

I would like to show only the base URL like localhost:8080/appname for all navigations.

Is this possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

萌辣 2024-11-25 12:25:01

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

然后,您可以创建一个映射到 /* URL 模式的 Filter,并透明地继续所有静态内容的请求/响应链,并将剩余内容分派到 >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 servlet 运行时才可用。

Yes, it is possible if you put all static content such as images, stylesheets, javascripts and so on in a fixed common folder such as /static, /resources, /assets, etc and if you map the FacesServlet itself on an URL pattern of *.xhtml.

Then you can create a Filter which is mapped on an URL pattern of /* and transparently continues the request/response chain for all static content and dispatches the remnant to the 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.
}

This is not possible with a navigation handler as it has to be executed in the faces context which is only available if the faces servlet has run.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文