如何在Java EE中美化路由?

时间:2019-02-25 17:49:29

标签: java-ee url-rewriting jsf-2.3 java-ee-web-profile

面对Internet上关于如何在Java EE / Jakarta EE(版本7或8)中美化路由的不良文档和指南。我想问大家您是否有任何建议。

我目前正在使用OCPsoft Rewrite,但是他们的文档,指南和社区看上去真的很寂寞或沉默。

您如何将基本的XHTML JSF路由转换为诸如views/mypage.xhtml之类的视图,转换为诸如/path/to/mypage之类的精美URL?

也许Java EE / Jakarta EE中有很多人,不在乎修饰路线?

1 个答案:

答案 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-但我想有些人只是喜欢多走一步。

很抱歉,我在网站上找不到关于此内容的详尽而完整的报道-所以我认为我也应该写一篇。