面对关于如何在Java /Jakarta(版本7或8)中美化路由的Internet上糟糕的文档和指南。我想问问你们是否有什么建议。
我目前正在使用OCPsoft重写,但是它们的文档、指南和社区看起来很轻或很安静。
如何将基本的XHTML路由转换为一些漂亮的URL,比如views/mypage.xhtml,比如/path/to/mypage?
或者很多在Java /Jakarta中的人不关心美化路线?
发布于 2019-02-26 00:37:27
重写过滤器(PrettyFaces)是最常用的过滤器之一。事实上,这是如此普遍,我们实际上在这里简要地介绍了这个问题,在Chalmers的网络应用课程中,这是几年前的事了。要使用它,首先需要将下列依赖项添加到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还支持注释--允许您跳过“漂亮-config.xml”文件,直接在后台bean类的基础上指定备用URL模式。
@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 filter (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 --但我想有些人只是喜欢这样做。
很抱歉,我在网站上找不到一个好的,彻底的报道,所以我想我还是写一篇吧。
https://stackoverflow.com/questions/54871968
复制相似问题