Qué URL usar para vincular / navegar a otras páginas JSF

Estoy confundido acerca de cómo vincular los archivos en un proyecto de Java Server Faces, cuando algunos de los archivos están en subcarpetas. (Iba a adjuntar capturas de pantalla para que pueda ver la vista del proyecto de Nebeans y la vista de archivos del ejemplo que bash … pero todavía no puedo agregar imágenes).

Mi proyecto de ejemplo tengo archivos llamados “index.xhtml” y “calculate / calculate.xhtml”. También tengo un archivo llamado “template.xhtml” que ambos usan. La pregunta es qué formato de url usar en la plantilla que funcionará para ambos archivos.

En html directo, simplemente usaría algo como lo siguiente para proporcionar un enlace a la página de inicio que funcionaría desde cualquier ubicación:

Home 

Pero no puedo entender qué cuenta como la carpeta raíz para una aplicación JSF, y si usar la estructura de la carpeta “vista del proyecto” o la estructura de la carpeta “lista de archivos”.

Primero que nada, JSF es un generador de código HTML. Por lo tanto, no es diferente en JSF que en HTML “simple”. No debe mirar la estructura del sistema de archivos en el proyecto de webapp al crear enlaces en HTML. Debería ver la estructura de URL pública de esos recursos. Se trata del navegador web que debe invocar y descargar esos recursos, no el servidor web. El navegador web no sabe absolutamente nada sobre la estructura del sistema de archivos en el servidor web. Esto no es específico de los proyectos de JSF. Esto se aplica a todos los proyectos web.

Las URL relativas no son relativas a su ubicación en la estructura del sistema de archivos en el proyecto de webapp. Son relativos a la URL de solicitud del documento HTML abierto actualmente, exactamente el que ve en la barra de direcciones del navegador. Se debe tener en cuenta que cuando un elemento está presente en el documento HTML, todas las URL relativas en el documento HTML que no comienzan con / serán relativas a él.

Dada una aplicación web que está configurada con el patrón URL de mapeo de FacesServlet de *.xhtml , y se implementa en localhost:8080 con una ruta de /context de /context , la URL de un archivo /index.xhtml en la raíz web del proyecto será la siguiente:

 http:https://localhost:8080/context/index.xhtml ---- -------------- ------- ----------- | | | `-- resource | | `-- path (can be multiple folders) | `-- domain (and port) `-- scheme 

Cuando se encuentre actualmente en http:https://localhost:8080/context/index.xhtml , y desee crear un enlace a http:https://localhost:8080/context/calculate/calculate.xhtml , todas las formas siguientes lo harán en última instancia, apunta exactamente a la misma URL absoluta.

  • Una URL relativa que comienza con // es relativa al esquema actual.

     link 
  • Una URL relativa que comienza con / es relativa al dominio.

     link 
  • Una URL relativa que no comienza con / es relativa a la ruta.

     link 

Y cuando se encuentre actualmente en http:https://localhost:8080/context/calculate/calculate.xhtml y desee establecer un enlace a http:https://localhost:8080/context/index.xhtml , se aplicarán las mismas reglas:

  • Una URL relativa que comienza con // es relativa al esquema actual.

     link 
  • Una URL relativa que comienza con / es relativa al dominio.

     link 
  • Una URL relativa que no comienza con / es relativa a la ruta.

     link 

Como probablemente ya sepa, una URL relativa que comienza con / no depende de la ruta y el dominio actuales. Por lo tanto, esa es la URL que realmente desea usar en todas partes en su aplicación web sin preocuparse por problemas de mantenimiento al cambiar de dominio o mover archivos en el servidor. Lo único que queda es la dinámica de la ruta de contexto. Probablemente ya sepa que este valor no es controlable desde dentro de la aplicación web. Realmente te gustaría evitar codificarlo en forma rígida. Sin embargo, puede dejar que JSF lo imprima fácilmente mediante progtwigción con un poco de ayuda de EL. Es simplemente disponible por HttpServletRequest#getContextPath() y HttpServletRequest está en EL disponible como el objeto implícito #{request} .

 link link 

Solo es tedioso repetir esto cada vez. Afortunadamente, JSF ofrece el componente con el propósito de generar un elemento HTML con la ruta de contexto actual automáticamente en línea.

   

Tenga en cuenta que el outcome debe representar una ID de vista de JSF, que no es necesariamente la misma que la ruta de la URL (lo será cuando FacesServlet en *.xhtml ). Incluso puede omitir la extensión de archivo aquí, JSF la detectará automáticamente como parte del mecanismo de “navegación implícita”.

   

Ver también:

  • ¿Se recomienda utilizar la etiqueta html?
  • ¿Cuáles son esas URL que están comenzando con // que puede ver en la fuente html de Google+?
  • Facelets JSF: A veces veo que la URL es .jsf y, a veces, .xhtml. ¿Por qué?
  • Objetos implícitos en EL
  • ¿Cómo navegar en JSF? Cómo hacer que la URL refleje la página actual (y no la anterior)
Intereting Posts