2011-06-14 13 views
7

JSF 2 kompozit bileşenlerinde miras olarak bir şey var mı?JSF 2 kompozit bileşenlerinde miras olarak bir şey var mı?

Bildiğim kadarı yok. Sadece emin oluyorum.

Teşekkürler!

+0

Doğru bir yanıt verdiğinden emin değilim, ancak kompozit bileşenlerde kalıtımın yerine geçmenin alt bileşenleri olduğunu düşünüyorum. Bakınız: http://weblogs.java.net/blog/cayhorstmann/archive/2010/01/30/composite-input-components-jsf – sfrj

cevap

5

Kompozit bileşenlerin kalıtımı afaik değildir. Kod çoğaltmasından kaçınmak için yaptığımız şey bir JSF2 kompozit bileşeninin uygulanmasını süslemektir.

eden uygulamanın tüm giriş alanlarının tarafından paylaşılan şeyler böyle bir dekoratör şablonu içinde sağlanır:

<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> 

Ve kompozit bileşen kendisini süslemek için şablon kullanır:

<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> 

Bu şekilde Alan özelliklerini (yani salt okunur, gerekli, stil, ...) değiştirdiğimiz zaman, yalnızca dekoratör şablonunu değiştirmemiz gerekir.

İlgili konular