Con JSF, beans gestionados, & EL 2,2 sé en general, que una expresión de la forma:JSF, EL, Managed Beans - ¿Cómo saber qué son las firmas getter y setter?
#{bean.value}
se asignarán a un conjunto correspondiente de funciones en una clase de bean administrado de esta manera:
@ManagedBean
class Bean {
private String value;
public String getValue() { return value; }
public void setValue(String s) { value = s; }
}
también es posible obtener y establecer las propiedades de un mapa:
#{bean.value['key']}
el respaldo de algo como:
@ManagedBean
class Bean {
private Map<String, Boolean> kvMap;
public boolean getValue(String key) { return kvMap.get(key); }
public void setValue(String key, boolean value) { kvMap.put(key, value); }
}
Hasta ahora todo bien.
Estoy descubriendo que paso más tiempo con JSF pero estoy tratando de escribir trozos reutilizables de código. Específicamente, pequeños bloques de xhtml en <ui:composition>
bloques que puedo incluir a través de <ui:include>
. Además, muchas de las cosas más útiles para mí son cosas como conjuntos anidados de casillas de verificación (nuestro diseñador de interfaz de usuario simplemente se rebela sobre ellas ;-), y allí <ui:repeat>
se vuelve muy útil.
Invariablemente, con el fin de utilizar <ui:repeat>
y <ui:include>
sin una cantidad impía de escribir, he estado usando alias, ya sea creados a través de <ui:param>
o en línea con algo así como el atributo var
de <ui:repeat>
.
Como he estado escribiendo más y más UIComponents anidados, particularmente cosas que obtienen sus valores de los mapas dentro de los mapas, cada vez me resulta más difícil deducir la firma correcta del método setter que JSF buscará al enviar un forma (por alguna razón, escribir getters parece ser más natural).
Mi pregunta para los gurús entonces es:
¿Hay alguna manera de conseguir JSF me diga lo que espera una firma colocador para que parezca? Dado que JSF generalmente no se queja de una expresión que se resuelve como un getter (pensando que es una propiedad de solo lectura), encuentro que la falta de retroalimentación es frustrante y parece que es necesario manipular mucho con diferentes firmas de métodos antes de comenzar. finalmente golpeó esa magia a la derecha.
Espero que haya alguna técnica, por ejemplo, una consulta FacesContext ... en tiempo de ejecución o buscar en algún intermediario compilado como un archivo de clase que apunte a la firma del colocador correcto para una propiedad profundamente anidada. Si hay tal cosa, creo que me ahorraría mucho tiempo tratando de encontrar la forma de construir un setter por prueba y error.
Espero haber expresado claramente lo que busco, gracias de antemano por sus respuestas.
+1 para una excelente pregunta ... Creo que lo que tú y yo queremos es algo así como la ventana de visualización de Perspectiva de depuración de Eclipse, excepto las expresiones ad-hoc JSF y EL. Si no podemos encontrar esto, ¡entonces suena como un proyecto genial para un plugin Eclipse de código abierto! –
Después de publicar esta pregunta, pasé un tiempo (re) leyendo la especificación EL 2.2 y parece que hay excelentes instalaciones en ELResolver y sus contrapartes para crear algunas buenas herramientas. Sin embargo, dado que veo claramente que JSF no tiene problemas para establecer valores en las expresiones de Map, sin importar qué tan feos parezcan (p. Ej. # {Blah.foo [name] ['x'] [otherThing]}) no sé si vale la pena el tiempo Gracias por el +1 aunque :) – par
'getValue (String key)', 'setValue (String key, boolean value)' - No creo que esto funcione. Java Beans 1.01 sí especifica propiedades indexadas, pero las claves deben 'int'. –