JSF与ExtensionlessURL/Omnifaces

JSF与ExtensionlessURL/Omnifaces,jsf,omnifaces,Jsf,Omnifaces,我正在尝试在我的JSF应用程序中使用无扩展URL 我已经在使用: 这很好,但是如果我有一个带有参数的URL,它仍然带有: jsf?myparameter=12345 这里是否也可以排除.jsf,因此URL将为: mypage?myparameter=12345 我知道也有Prettyfaces可用,但我想我必须为每个JSF页面定义一个映射?因此,我使用的是Omnifaces 有什么想法可以帮助您吗?看来您有一个现有的JSF应用程序,它的FacesServlet被映射到*.JSF而不是*.xhtm

我正在尝试在我的JSF应用程序中使用无扩展URL

我已经在使用: 这很好,但是如果我有一个带有参数的URL,它仍然带有:

jsf?myparameter=12345

这里是否也可以排除.jsf,因此URL将为:

mypage?myparameter=12345

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


有什么想法可以帮助您吗?

看来您有一个现有的JSF应用程序,它的
FacesServlet
被映射到
*.JSF
而不是
*.xhtml
,并试图通过OmniFacesView使用默认的“最小”配置启用无扩展URL

如果不对现有的JSF应用程序进行其他更改,这确实是行不通的

FacesView希望您已经将
FacesServlet
映射到自JSF 2.0以来的
*.xhtml
的URL模式。因此,您需要进行以下调整:

  • web.xml
    中将
    FacesServlet
    映射从
    *.jsf
    更改为
    *.xhtml
  • .xhtml
    查找并替换源代码中所有出现的
    .jsf
    。例如。
    ec.redirect(ec.getRequestContextPath() + "/portal/employeeEdit.jsf" + "?id=" + id);
    
    必须成为 一个像样的IDE只需点击几下就可以做到这一点(例如Eclipse Ctrl+H、文件搜索、在封闭的项目中查找
    .jsf
    ,并替换为
    .xhtml
  • 或者,等待OmniFaces 2.7.11或3.11或4.0-M8发布。今天,我已根据修复了这些版本中的向后兼容性问题。使用此修复程序,现有的
    *.jsf
    URL将正确地被301重定向到无扩展URL


    请注意,此问题与带有参数的URL没有特别关系。这也会发生在没有参数的URL上。

    例如:
    ExternalContext ec=FacesContext.getCurrentInstance().getExternalContext();字符串id=employee.getId();重定向(ec.getRequestContextPath()+”/portal/employeeEdit.jsf“+”?id=“+id”)是的,它被重定向到/portal/employeeEdit.jsf?id=1234,但我想要:/portal/employeeEdit?id=1234(=不带“jsf”)。。没有参数,它可以与Omnifaces配合使用…谢谢BalusC。。。。我目前在我的web.xml中有:
    facesServlet*.jsf*.xhtml
    您也需要采取行动#2。我对答案进行了编辑,以进一步阐述这一点。
    ec.redirect(ec.getRequestContextPath() + "/portal/employeeEdit.xhtml" + "?id=" + id);