Подтвердить что ты не робот

Как настроить сопоставления URL-адресов JSF без расширений файлов?

Большинство учебных пособий предлагают конфигурацию JSF по умолчанию, аналогичную следующей web.xml:

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
</context-param>


<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

С этой конфигурацией соответствующие файлы *.xhtml в моем webapp обнаруживаются только Сервером Faces, если соответствующие URL-адреса заканчиваются расширением файла .jsf(например, http://localhost/welcome.jsf). Возможно ли настроить web.xml, чтобы URL-адреса, которые не заканчиваются на .jsf, также обрабатываются как страницы JSF с использованием тех же *.xhtml файлов?

Другими словами, я хотел бы иметь URL-адреса, которые не зависят от реализации на стороне сервера.

4b9b3361

Ответ 1

Вы можете использовать Фильтр, чтобы скрыть это расширение и сделать URL-адрес SEO дружественным, Одна из таких реализаций фильтра Pretty Filter.

Например: Если вам нужно http://host:port/yourapp/login разрешить с помощью login.xhtml, то в хорошем фильтре выполните следующие настройки

<url-mapping id="login">
    <pattern> /login </pattern>
    <view-id> /legacy/user/login.jsf </view-id>
</url-mapping>

Посмотрите двухминутное видео

Ответ 2

вы можете создать сопоставление url, как это создать файл faces-config.xml в папке WEB-INF

<?xml version="1.0" encoding="ISO-8859-1"?>

<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
   http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
              version="1.2">

   <navigation-rule>
        <from-view-id>/jsf/demoapp</from-view-id>
        <navigation-case>
            <from-outcome>demoapp</from-outcome>
            <to-view-id>/demoapp.xhtml</to-view-id>
        </navigation-case>
   </navigation-rule>


</faces-config>

Ответ 3

JSF 2.3 решит эту проблему. Пример можно найти здесь.

Просто используйте <url-pattern>/pageName</url-pattern> в отображении сервлета JSF в web.xml