面对 Internet 上关于如何在 Java EE/Jakarta EE(版本 7 或 8)中美化路由的糟糕文档和指南。我想问问大家有没有什么建议。
我目前正在使用OCPsoft Rewrite,但他们的文档、指南和他们的社区看起来非常轻松或沉默。
您如何将到视图的基本 XHTML JSF 路由views/mypage.xhtml
转换为一些漂亮的 URL 之类的/path/to/mypage
?
或者也许很多 Java EE/Jakarta EE 中的人,不关心美化路线?
面对 Internet 上关于如何在 Java EE/Jakarta EE(版本 7 或 8)中美化路由的糟糕文档和指南。我想问问大家有没有什么建议。
我目前正在使用OCPsoft Rewrite,但他们的文档、指南和他们的社区看起来非常轻松或沉默。
您如何将到视图的基本 XHTML JSF 路由views/mypage.xhtml
转换为一些漂亮的 URL 之类的/path/to/mypage
?
或者也许很多 Java EE/Jakarta EE 中的人,不关心美化路线?
重写过滤器(PrettyFaces)是最常用的过滤器之一。事实上,它是如此普遍,以至于我们实际上在几年前的 Chalmers 的 Web 应用程序课程中简要介绍了它。要使用它,您首先需要将以下依赖项添加到您的 POM 文件中;
<dependency>
<groupId>org.ocpsoft.rewrite</groupId>
<artifactId>rewrite-servlet</artifactId>
<version>3.4.2.Final</version>
</dependency>
<dependency>
<groupId>org.ocpsoft.rewrite</groupId>
<artifactId>rewrite-config-prettyfaces</artifactId>
<version>3.4.2.Final</version>
</dependency>
PrettyFaces 完全使用 JavaEE 运行时注解——所以一旦添加它就应该可以使用了。接下来,您定义配置 - 默认情况下,它将pretty-config.xml
在您的WEB-INF/
目录中查找文件。基本设置可能如下所示;
<?xml version="1.0" encoding="UTF-8"?>
<pretty-config xmlns="http://ocpsoft.org/schema/rewrite-config-prettyfaces"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ocpsoft.org/schema/rewrite-config-prettyfaces
http://ocpsoft.org/xml/ns/prettyfaces/rewrite-config-prettyfaces.xsd">
<url-mapping id="home">
<pattern value="/" />
<view-id value="/index.xhtml" />
</url-mapping>
<url-mapping id="view-authors">
<pattern value="/authors" />
<view-id value="/author/list.xhtml" />
</url-mapping>
<url-mapping id="delete-author">
<pattern value="/authors/delete/#{id}"/>
<view-id value="/author/delete.xhtml?id=#{id}" />
</url-mapping>
<url-mapping id="edit-author">
<pattern value="/authors/edit/#{id}"/>
<view-id value="/author/edit.xhtml?id=#{id}" />
</url-mapping>
</pretty-config>
本质上,您可以将上述内容阅读为使view-id
pattern
. 要读取 id 值,您在页面上指定以下内容(就像您通常那样);
<f:metadata>
<f:viewParam name="id" value="#{bean.id}" />
</f:metadata>
一段时间以来,PrettyFaces 还支持注释 - 允许您跳过“pretty-config.xml”文件并在支持 bean 类之上直接指定备用 URL 模式。允许您直接在支持 bean 中执行类似的操作;
@URLMapping(pattern = "/authors/edit/#{id}", viewId = "/author/edit.xhtml?id=#{id}")
您可以在此处找到有关这些注释的更多信息; https://www.ocpsoft.org/prettyfaces/annotations-support-is-coming-to-prettyfaces-url-rewriting/
虽然 PrettyFaces 允许您控制 URL 的完整结构(包括参数),但如果您只需要剥离扩展,您可以使用 OmniFaces ExtensionlessURL 过滤器 ( http://showcase.omnifaces.org/facesviews/ExtensionlessURLs ) - 它简直就是这样控制的;
<context-param>
<param-name>org.omnifaces.FACES_VIEWS_SCAN_PATHS</param-name>
<param-value>/*.xhtml</param-value>
</context-param>
这将使视图无需 xhtml 扩展即可直接访问。要将 OmniFaces 添加到您的项目中,只需在您的 POM 中指定以下内容;
<dependency>
<groupId>org.omnifaces</groupId>
<artifactId>omnifaces</artifactId>
<version>3.2</version>
</dependency>
我还想提一下,在该领域(在实现中),应用程序推出自己的解决方案并自行实现“美化”并不少见——这在应用程序需要“生成”自己的 URL 时尤其常见一些随机的ID。这可以通过实现forward()
在请求调度程序上调用的自定义过滤器来完成。这显然可以让你走得更远,做任何你想做的事。当然,你真的可以只使用 PrettyFaces - 但我猜有些人只是喜欢多走一步。
很抱歉这篇文章太长了,但我无法在网站上找到一个好的、全面的报道——所以我想我不妨写一个。