cómo depurar JSF / EL

Cómo depurar EL en la página JSF? Me gustaría ver valores de variables, llamadas a funciones, etc. La mejor solución sería un plugin de eclipse, pero cualquier otra posibilidad es mejor que adivinar “¿Por qué esta expresión no se procesó correctamente?”.

Lo más cercano a lo que puede obtener en JSF / Facelets es colocar un en algún lugar de la vista:

  

Presionando Ctrl Shift D debería mostrar una ventana emergente con información de depuración sobre el árbol de componentes y todos los parámetros de solicitud disponibles y las variables de solicitud / vista / flash / sesión / ámbito de la aplicación. Básicamente es una representación del contenido de todos esos mapas.

La tecla de acceso directo se puede configurar mediante el atributo de hotkey acceso hotkey para que pueda elegir otra cuando choca con las teclas de acceso rápido predeterminadas del navegador, como lo haría en Firefox; Ctrl Shift D mostraría de forma predeterminada el diálogo Agregar marcadores . Así es como puedes hacer para escuchar en Ctrl Shift X en su lugar:

  

Por lo general, también le gustaría ocultarlo en la etapa de no desarrollo, así que agregue una condición renderizada como esa:

  

En la información de depuración que se muestra, la información proporcionada sobre las variables de ámbito no es tan buena como cabría esperar. Solo muestra el resultado Object#toString() de todas las variables del ámbito que se establece de manera predeterminada en com.example.Bean@hashcode . No puede explorar sus propiedades y los valores de sus propiedades directamente como lo haría en la vista de depuración del depurador de Eclipse. Necesitará implementar toString() en la clase en consecuencia para que se devuelva la información relevante tanto como sea posible (si es necesario, incluso puede dejar que Eclipse la genere automáticamente haciendo clic con el botón derecho en el código fuente> Fuente> Generar toString () ):

 @Override public String toString() { return String.format("Bean[prop1=%s,prop2=%s,prop3=%s]", prop1, prop2, prop3); } 

En cuanto a las llamadas a métodos, simplemente coloque un punto de interrupción en el código fuente de Java de la manera habitual. Eclipse también se activará cuando EL llame al método. Si se trata de un bean administrado, también verá sus propiedades en el depurador de Eclipse.

Si realmente tiene problemas, entonces si puede obtener la fuente para la implementación de EL (lo suficientemente fácil para el RI), entonces puede usar Eclipse para establecer puntos de interrupción en los métodos de implementación de EL. Debes entender cómo funciona el código EL, pero no es tan complicado. No es para los más débiles de corazón sin embargo.

Otra posibilidad sería crear y evaluar el EL programáticamente. Hay ejemplos de cómo hacer esto alrededor. Luego puede usar el depurador para buscar la expresión y el resultado hasta que haya resuelto su problema.