面对Internet上关于如何在Java EE / Jakarta EE(版本7或8)中美化路由的不良文档和指南。我想问大家您是否有任何建议。
我目前正在使用OCPsoft Rewrite,但是他们的文档,指南和社区看上去真的很寂寞或沉默。
您如何将基本的XHTML JSF路由转换为诸如views/mypage.xhtml
之类的视图,转换为诸如/path/to/mypage
之类的精美URL?
也许Java EE / Jakarta EE中有很多人,不在乎修饰路线?
答案 0 :(得分:2)
重写过滤器(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>
我还想提到,在现场(在实现中),应用程序自行滚动解决方案并自行实现“美化”并不是很常见-当应用程序需要“生成”自己的脚本时,这尤其常见基于一些随机ID的URL。这可以通过实现一个自定义过滤器来实现,该过滤器在请求分配器上调用forward()
。显然,这使您可以更进一步,并做几乎任何您想做的事情。当然,您真的可以只使用PrettyFaces-但我想有些人只是喜欢多走一步。
很抱歉,我在网站上找不到关于此内容的详尽而完整的报道-所以我认为我也应该写一篇。