¿Hay algo así como herencia en componentes compuestos JSF 2?¿Existe algo así como herencia en componentes compuestos JSF 2?
Que yo sepa, no lo es. Solo me estoy asegurando.
Gracias!
¿Hay algo así como herencia en componentes compuestos JSF 2?¿Existe algo así como herencia en componentes compuestos JSF 2?
Que yo sepa, no lo es. Solo me estoy asegurando.
Gracias!
La herencia de componentes compuestos no es posible afaik. Lo que hicimos para evitar la duplicación de código es decorar la implementación de un componente compuesto JSF2.
El material compartido por todos los campos de entrada de nuestra aplicación se proporciona dentro de una plantilla decorador de la siguiente manera:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:cc="http://java.sun.com/jsf/composite"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:cu="http://mytags.de/jsftags">
<!-- provides a common set of layout information for inputfields -->
<ui:param name ="fieldStyle" value="#{propertiesController.get('FIELD_STYLE', cc.attrs.name)}" />
<h:panelGroup id="basicInputField" styleClass="basicInputField" layout="block" style="width: #{cc.attrs.width}; height: #{cc.attrs.height};">
<ui:insert name="component">
no component given...
</ui:insert>
</h:panelGroup>
</ui:composition>
Y el componente compuesto utiliza la plantilla para decorar sí:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:cc="http://java.sun.com/jsf/composite"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:cu="http://mytags.de/jsftags">
<cc:interface>
<cc:attribute name="name" required="true" />
<cc:attribute name="width" required="false" default="auto" />
<cc:attribute name="height" required="false" default="auto" />
<cc:attribute name="inset" required="false" default="0px" />
</cc:interface>
<cc:implementation>
<ui:decorate template="basicInputField.xhtml">
<ui:define name="component">
<h:inputText id="inputText" style="#{fieldStyle} width: 100%;" value="#{levelContent.test}" />
</ui:define>
</ui:decorate>
</cc:implementation>
</html>
esta manera solo necesitamos cambiar la plantilla del decorador, cuando cambie la forma en que recuperamos las propiedades del campo (es decir, solo lectura, requerida, estilo, ...).
No estoy seguro de dar una respuesta precisa, pero creo que en los componentes compuestos, el reemplazo de la herencia son los componentes secundarios. Ver: http://weblogs.java.net/blog/cayhorstmann/archive/2010/01/30/composite-input-components-jsf – sfrj