2011-05-02 28 views
12

Mayoría de los tutoriales proponen una configuración por defecto JSF similar al siguiente web.xml:¿Cómo configuro las correlaciones de URL JSF sin extensiones de archivo?

<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> 

Con esta configuración, los archivos * .xhtml correspondientes en mi aplicación web sólo se encuentran por el servlet caras si las URL correspondientes finaliza con la extensión de archivo .jsf (por ejemplo, http://localhost/welcome.jsf). ¿Es posible configurar web.xml para que las URL que no terminan en .jsf también se procesen como páginas JSF utilizando los mismos archivos * .xhtml?

En otras palabras, me gustaría tener URL que no dependan de la implementación del lado del servidor.

Respuesta

19

Puede usar el Filtro para ocultar esta extensión y hacer que su URL sea amigable, una de las implementaciones de Filtro es Pretty Filter.

Por ejemplo: Si necesita http://host:port/yourapp/login a resolver con su login.xhtml entonces en muy Configurar filtro siguiente manera

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

Tenga una mirada en two min video tutorial

2

puede crear mapeo URL como esta crear archivo faces-config.xml en la carpeta 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>

en web.xml que tiene que hacer 2 entradas

<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>

+0

bueno saber, pero sólo funciona para JSF derecho? No funcionaría para otros servlets. – gagarwal

Cuestiones relacionadas