Настройте FacesServlet <url-pattern>, чтобы избавиться от расширения .xhtml

У меня есть Login.xhtml и Home.xhtml. Я настроил шаблон url в web.xml следующим образом

<servlet-mapping>
   <servlet-name>Faces Servlet</servlet-name>
   <url-pattern>/faces/*</url-pattern>
</servlet-mapping>

<welcome-file-list>
  <welcome-file>Login.xhtml</welcome-file>
</welcome-file-list>

Когда я запускаю весь проект, страница входа URL похожа на это http://localhost:8080/fran/Login.xhtml, здесь fran - мое имя проекта..

Однако я бы хотел, чтобы это было http://localhost:8080/fran/Login/ вместо http://localhost:8080/fran/Login.xhtml.

Как я могу это достичь? Можно ли настроить <url-pattern> для каждой страницы, чтобы избавиться от расширения .xhtml?


решаемые

Как упоминалось ниже в BalusC в комментарии... OmniFaces FacesViews является удивительным. Вот шаги, которые я сделал:

  • Поместите omnifaces-1.5.jar в папку /WEB-INF/lib.
  • Добавьте код ниже web.xml:

    <context-param>
        <param-name>org.omnifaces.FACES_VIEWS_SCAN_PATHS</param-name>
        <param-value>/*.xhtml</param-value>
    </context-param>
    

Что он в конфигурации. Он отлично работает.

Ответ 1

Если ваша единственная причина - избавиться от расширения .xhtml, посмотрите OmniFaces FacesViews. Он предлагает нуль-конфигурационный способ достижения этого путем размещения файлов вида в папке /WEB-INF/faces-views/. В противном случае, если вы намереваетесь не изменять структуру своего проекта и хотите, чтобы ваши файлы просмотра находились в обычном месте и по-прежнему пользуетесь неограниченными URL-адресами, то это вопрос добавления следующего контекстного параметра:

<context-param>
    <param-name>org.omnifaces.FACES_VIEWS_SCAN_PATHS</param-name>
    <param-value>/*.xhtml</param-value>
</context-param>

В случае, если вы не хотите использовать OmniFaces, но хотите, чтобы вы сами хотели, вы просто посмотрите исходный код OmniFaces. Это открытый источник в соответствии с лицензией Apache 2.0.