12

と がLogin.xhtmlありHome.xhtmlます。web.xml次のようにURLパターンを構成しました

<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.xhtmlfran私のプロジェクト名です..

ただし、http://localhost:8080/fran/Login/代わりにしたいですhttp://localhost:8080/fran/Login.xhtml

どうすればこれを達成できますか?拡張機能<url-pattern>を取り除くために、すべてのページをカスタマイズすることは可能ですか?.xhtml

4

3 に答える 3

15

唯一の理由が拡張機能を取り除くことである場合、.xhtml使用している JSF のバージョンに応じてさまざまな方法があります。

JSF 2.3+

JSF 2.3 は、すべてのビューを収集するための新しい API を提供しますViewHandler#getViews()。これを以下ServletRegistration#addMapping()のように組み合わせます。ServletContextListener

@FacesConfig
@WebListener
public class ApplicationConfig implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        addExtensionLessMappings(event.getServletContext(), FacesContext.getCurrentInstance());
    }

    private void addExtensionLessMappings(ServletContext servletContext, FacesContext facesContext) {
        servletContext
            .getServletRegistrations().values().stream()
            .filter(servlet -> servlet.getClassName().equals(FacesServlet.class.getName()))
            .findAny()
            .ifPresent(facesServlet -> facesContext
                .getApplication()
                .getViewHandler()
                .getViews(facesContext, "/", ViewVisitOption.RETURN_AS_MINIMAL_IMPLICIT_OUTCOME)
                .forEach(view -> facesServlet.addMapping(view))
        );
    }
}

事実上、これはワンライナーです。出典: Arjan Tijms のブログおよびThe Definitive Guide to JSF

MyFaces を JSF 2.3 実装として使用している場合、これは次のweb.xmlコンテキスト パラメータのみによって透過的にアクティブ化できます。

<context-param>
    <param-name>org.apache.myfaces.AUTOMATIC_EXTENSIONLESS_MAPPING</param-name>
    <param-value>true</param-value>
</context-param>

Mojarra にはまだ同等のものはありません。

JSF 2.2-

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 ライセンスの下でオープン ソースです。それはワンライナーではありません。

于 2013-08-30T16:41:01.390 に答える
3

prettyfaces: Pretty URLs for JavaServer Facesをご覧ください。

メインページの2. Create pretty-config.xml の例を見てください

そして、第 2 章を見てください。

于 2013-08-30T08:00:14.483 に答える