Как настроить сопоставления URL JSF без расширений файлов? - PullRequest
13 голосов
/ 02 мая 2011

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

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

Ответы [ 2 ]

20 голосов
/ 02 мая 2011

Вы можете использовать Фильтр, чтобы скрыть это расширение и сделать свой 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>

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

3 голосов
/ 06 января 2015

вы можете создать отображение URL, как это создать файл face-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>

в web.xml нужно сделать 2 записи

    <servlet>
        <servlet-name>jsfServlets</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>jsfServlets</servlet-name>
        <url-pattern>/jsf/*</url-pattern>
    </servlet-mapping>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...