Establecer la página de inicio predeterminada a través de en el proyecto JSF

No puedo configurar una página predeterminada que se carga en el navegador cuando inicio un proyecto Java EE utilizando Tomcat 8.0 desde Eclipse. Estoy tratando de aprender JSF, así que seguí este tutorial

Todo funciona bien, pero solo puedo ver las páginas creadas cuando hago clic derecho en el archivo login.xhtml o welcome.xhtml y elijo “Ejecutar como / Ejecutar en el servidor”.

Hasta ahora, todas las demás aplicaciones web que he creado cargaron la página predeterminada cuando comencé todo el proyecto. El comportamiento predeterminado es cargar la página index.html (o quizás index.jsp si hay alguna). Así que agregué index.html e index.xhtml páginas en mi carpeta WEB-INF en el proyecto, con la esperanza de que se muestre al menos una de ellas. Sin embargo, nada sucede. El navegador siempre muestra solo la página en localhost:8080/JSFFaceletsTutorial/ URL, pero la página está en blanco, ni siquiera aparece un mensaje de error. Creo que he estado recibiendo el error 404 en el proceso de resolver este problema en el camino, sin embargo, ya no puedo reproducir este error y no recuerdo qué lo causó.

Descubrí que es posible cambiar la página de inicio predeterminada

Sin embargo, tampoco funciona para mí. Independientemente de si edito el archivo web.xml o no, obtengo el mismo resultado.

Lo que es aún más desconcertante, es que cuando intenté cambiar el navegador web: “Ventana / Navegador web / …” actuó durante un tiempo de manera diferente en los navegadores web externos que en el navegador web interno de Eclipse. El interno siempre tenía una página en blanco, pero los navegadores web externos una vez lograron mostrar la página index.html , pero era una versión obsoleta. A pesar de que estaba absolutamente seguro de haberlo editado, guardado los cambios, reiniciado el servidor … y aún así, me mostró la versión obsoleta de la página. E incluso en este caso, aún ignoró los cambios realizados en el archivo web.xml . Pero cuando lo bash ahora, vuelve a mostrar una página blanca en blanco en todos los navegadores. No estoy al tanto de ningún cambio que haya hecho, excepto la edición del archivo web.xml

Mi suposición es que el problema está en la tecnología JSF que aún no entiendo completamente. Es porque cuando elijo ejecutar las páginas login.xhtml y welcome.xhtml login.xhtml clic derecho en “Ejecutar como / Ejecutar en el servidor”, la URL de esas páginas está en localhost:8080: con ruta /JSFFaceletsTutorial/faces/login.xhtml y /JSFFaceletsTutorial/faces/welcome.xhtml . Eso es raro, porque no tengo ningún directorio “caras” en mi proyecto. Escribir todas las permutaciones posibles de:

  faces/index.html faces/index.xhtm  

en el web.xml tampoco ayudó. No ayudó cuando escribí la dirección completa allí tampoco.

Aquí hay advertencias que recibo en la consola (omití las entradas de registro INFO):

“19 de diciembre de 2014, 9:39:55 AM org.apache.tomcat.util.digester.SetPropertiesRule begin ADVERTENCIA: [SetPropertiesRule] {Server / Service / Engine / Host / Context} Estableciendo la propiedad ‘fuente’ en ‘org.eclipse. jst.jee.server: JSFFaceletsTutorial ‘no encontró una propiedad que coincida … ADVERTENCIA: JSF1074: Bean administrado llamado’ loginBean ‘ya se ha registrado. Reemplazar el tipo de clase de bean administrado existente com.tutorial.LoginBean con com.tutorial.LoginBean .Dic 19, 2014 9:39:57 AM org.apache.coyote.AbstractProtocol start ”

No estoy seguro de que esto sea útil. Estoy sin ideas ahora.

En primer lugar, el no representa la ruta a la “página de inicio predeterminada”. Representa el nombre del archivo físico contenido en la carpeta que desea mostrar como archivo predeterminado cuando se solicita una carpeta como / , /foo/ , /foo/bar/ , etc.

Entonces, en el sabor JSF 2.x, eso sería básicamente:

  index.xhtml  

De esta forma, si el usuario final solicita / y usted tiene /index.xhtml , entonces se /index.xhtml . O bien, si el usuario final solicita /foo y tiene /foo/index.xhtml , se servirá, etc. Si no hay tal archivo, se devolverá un error 404.

Ahora, parece que asignó su FacesServlet en un prefijo de /faces/* . Esto es un remanente de edades JSF 1.0 / 1.1 y realmente no se recomienda en estos días. Tal vez estaba leyendo un tutorial desactualizado dirigido a JSF 1.x, o un tutorial mal mantenido que fue escrito originalmente para JSF 1.x y luego se actualizó de forma descuidada para JSF 2.x en lugar de reescribir desde cero.

Ese tutorial tampoco parece haber explicado algunos conceptos básicos de servlet . A saber, para poder ejecutar los componentes JSF en la página XHTML y generar algún resultado HTML, el FacesServlet debe invocarse cuando se solicita la página XHTML. Cuando solicita la página XHTML como /index.xhtml , mientras FacesServlet se asigna en /faces/* , no se invocará. El navegador recuperaría el código fuente JSF sin analizar en lugar de la salida HTML generada. Puede verlo haciendo clic con el botón derecho, Ver fuente en navegador web. Debería haber solicitado la página como /faces/index.xhtml para que FacesServlet pueda ejecutarse y producir resultados HTML que el navegador pueda comprender y presentar.

Eso solo no va bien junto con los archivos de bienvenida. Esto explica totalmente por qué obtienes una página “blanca limpia” (en blanco) cuando utilizas index.xhtml como archivo de bienvenida (algunos index.xhtml inferiores como IE generarían un diálogo de descarga de forma confusa debido a la falta de tipo de contenido incorrecto en la respuesta que contiene el código fuente XHTML sin procesar ) El FacesServlet simplemente no se invocaba. Simplemente elimine el patrón de URL /faces/* pasado de moda y use en su lugar el patrón de URL JSF 2.x minded *.xhtml .

  facesServlet *.xhtml  

De esta forma, los archivos de bienvenida deberían funcionar y solo puede abrir páginas JSF solicitando directamente su URL física sin problemas con las URL virtuales. Esto no fue posible en JSF 1.x porque permitiría que el FacesServlet ejecutara en un bucle infinito y provocara un desbordamiento de la stack.

Ver también:

  • Facelets JSF: A veces veo que la URL es .jsf y, a veces, .xhtml. ¿Por qué?
  • Establecer la URL de la aplicación en el servidor WAS, ¿de dónde viene / faces / proviene?
  • ¿Cuál es la diferencia entre crear páginas JSF con la extensión .jsp o .xhtml o .jsf
  • ¿Por qué se puede ubicar el archivo de bienvenida web.xml dentro de WEB-INF?
  • Cómo usar una subcarpeta como directorio de bienvenida web.xml

En cuanto a esas advertencias, no están relacionadas pero son bastante googlables.

Puede configurar una página predeterminada en el archivo web.xml para que invoque facesServlet en JSF de 2 maneras:

   facesServlet javax.faces.webapp.FacesServlet   facesServlet *.xhtml   index.xhtml   

o invoque el facesServlet directamente desde el archivo de bienvenida de esta manera:

   faces/index.xhtml   

¡Espero que ayude a alguien!

Intereting Posts