有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java映射JSF。xhtml文件没有扩展名

在JSF中,我可以将Facesservlet映射到各种URL模式。例如*.xhtml

然而,我想要的是将Faces Servlet映射到no扩展。也就是说,如果我的web根目录中有一个页面customers.xhtml,我想使用http://example.com/customers请求它

我看了问题{a1},这在某种程度上是可行的,但它要求我分别映射我拥有的每个文件(如果我错了,请纠正我)

如何将所有.xhtml文件一次映射到facesservlet,而不必单独映射它们


共 (2) 个答案

  1. # 1 楼答案

    现在,这是可能的标准。JSF2.3解决了这个问题。例如hereJSF release info

    只需在web中JSF的servlet映射中使用<url-pattern>/pageName</url-pattern>。xml

        <servlet>
          <servlet-name>JSF</servlet-name>
          <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
          <load-on-startup>1</load-on-startup>
        </servlet>
    
        <servlet-mapping>
          <servlet-name>JSF</servlet-name>
          <!  suffix  >
          <!  if someone open /other.xhtml instead of /other  >
          <url-pattern>*.xhtml</url-pattern>
    
          <url-pattern>/home</url-pattern><!  it will map to /home.xhtml  >
          <url-pattern>/other</url-pattern><!  it will map to /other.xhtml  >
        </servlet-mapping>
    
  2. # 2 楼答案

    用标准方法是不可能的。基本上,您需要自制一个映射在/*上的servlet filter,并检查当前请求URL是否为无扩展URL,如果是,则在附加文件扩展名的URL上执行^{}调用(您知道,转发不会像重定向那样修改当前请求URL)。您还需要一个定制的view handler来为JSF<h:form><h:link>等生成所需的无扩展URL

    或者,您可以使用PrettyFaces或OmniFaces'FacesViews,这样您就不需要重新发明轮子。在FacesView showcase页面的底部,您可以找到一些直接指向源代码的简单链接,这些链接可能会给您一些启发