¿Cómo logro esto, haciendo que las constantes sean accesibles tanto desde el respaldo de los beans como desde los archivos XHTML?
En el respaldo de los granos, es obviamente fácil. Como solo son clases Java, no es diferente de la forma Java "normal". Puede usar los campos enum
o public static final
. En vistas, esta es una historia diferente. Hasta la próxima versión 3.0, EL does not support constants de ninguna manera.
Sugiero usar enums ya que EL tiene soporte implícito para ellos en las comparaciones de cadenas. No realiza ningún control de seguridad de tiempo de compilación/tiempo de ejecución, pero puede usar el nombre de la enumeración como una cadena. P.ej.
<h:someComponent ... rendered="#{order.status == 'SHIPPING'}" />
Si prefiere más código autodocumentado y un cheque de tiempo de ejecución (no, una comprobación de tiempo de compilación no es posible), entonces se podría considerar el uso de OmniFaces<o:importConstants>
.
<o:importConstants type="com.example.OrderStatus" />
<h:someComponent ... rendered="#{order.status == OrderStatus.SHIPPING}" />
Esto es IMO solo un poco más torpe. Sin embargo, el control del tiempo de ejecución es bueno durante el desarrollo. Un error tipográfico es fácilmente supervisado.
En el futuro EL 3.0 (JSR-341, parte de Java EE 7), es posible hacer referencia a las constantes de la misma manera. Consulte también How to reference constants in EL?. Esto solo requiere la importación programática de las constantes ya que no hay una etiqueta JSP/Facelets estándar para eso.
¿Por qué no tiene una clase con 'public static final String page1 =" page1.xhtml "'. Recuerde que esta clase se usará en sus beans administrados. Si vas a usar cualquiera de estos valores en tu código JSF, entonces podrías agregar @ApplicationScope a la clase y getters para el 'String's que usarás. –
¿Puedes explicarlo con un ejemplo? – javaMS