9

JSFでは、FacesサーブレットをさまざまなURLパターンにマップできます。例:*.xhtml

ただし、必要なのは、Facesサーブレットを拡張機能なしにマップすることです。つまりcustomers.xhtml、Webルートにページがある場合は、を使用してこれをリクエストしたいと思いhttp://example.com/customersます。

ファイル拡張子なしでJSFURLマッピングを設定するにはどうすればよいですか?これはある程度機能しますが、私が持っているすべてのファイルを個別にマップする必要があります(間違っている場合は修正してください)。

.xhtmlすべてのファイルを個別にマップせずに、一度にFacesサーブレットにマップするにはどうすればよいですか?

4

2 に答える 2

10

これは、標準的な手段では不可能です。基本的に、マップされているサーブレットフィルタを自作し/*、現在のリクエストURLが拡張子のないものであるかどうかを確認する必要があります。その場合RequestDispatcher#forward()は、ファイル拡張子が追加されたURLで呼び出しを実行します(転送によって現在のURLが変更されることはありません)リダイレクトとしてURLを要求します)。また、JSFなどに必要な拡張子のないURLを生成するためのカスタムビューハンドラーも必要です。<h:form><h:link>

または、PrettyFacesまたはOmniFacesのFacesViewsを使用して、車輪の再発明を行う必要がないようにすることもできます。FacesViewsショーケースページの下部に、ソースコードへの直接の簡単なリンクがいくつかあり、インスピレーションを得ることができます。

于 2013-01-21T12:01:01.750 に答える
1

今、それは標準で可能です。JSF2.3はこの問題を解決します。例はここにあります。JSFリリース情報

<url-pattern>/pageName</url-pattern>web.xmlのJSFのサーブレットマッピングで使用するだけです

    <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>
于 2019-06-14T21:34:34.340 に答える