带有 ExtensionlessURLs / Omnifaces 的 JSF

JSF with ExtensionlessURLs / Omnifaces

我正在尝试在我的 JSF 应用程序中使用 ExtensionlessURLs...

我已经在使用:https://showcase.omnifaces.org/facesviews/ExtensionlessURLs 这工作正常,但如果我有一个带有参数的 URL 它仍然带有:

mypage.jsf?myparameter=12345

是否有可能在这里也排除 .jsf,所以 URL 将是:

mypage?myparameter=12345

我知道 Prettyfaces 也可用,但我想我必须为每个 JSF 页面定义一个映射?因此我使用了 Omnifaces...

有什么帮助吗?

您似乎有一个现有的 JSF 应用程序,其 FacesServlet 映射到 *.jsf 而不是 *.xhtml,并且正在尝试通过 OmniFaces 启用无扩展名 URL FacesViews 使用其默认的“最小”配置。

如果不对现有的 JSF 应用程序进行其他更改,这确实无法工作。

FacesViews 期望您已经将 FacesServlet 映射到 *.xhtml 的 URL 模式,即自 JSF 2.0 以来的 recommended。所以需要做如下调整:

  1. web.xml 中将 FacesServlet 映射从 *.jsf 更改为 *.xhtml
  2. 在整个源代码中查找并替换所有出现的 .jsf.xhtml。所以例如
    ec.redirect(ec.getRequestContextPath() + "/portal/employeeEdit.jsf" + "?id=" + id);
    
    必须成为
    ec.redirect(ec.getRequestContextPath() + "/portal/employeeEdit.xhtml" + "?id=" + id);
    
    有点体面的 IDE 只需点击几下就可以做到这一点(例如 Eclipse Ctrl+H, File Search, 在 封闭项目 中找到 .jsf 并替换为 .xhtml).

或者,等待 OmniFaces 2.7.11 或 3.11 或 4.0-M8 发布。我今天已根据 issue 623 修复了这些版本中的向后兼容性问题。通过此修复,现有 *.jsf URL 将正确地自动 301 重定向到无扩展名。

请注意,此问题与带参数的 URL 没有具体关系。没有参数的 URLs 也会发生这种情况。