2011-06-14 9 views
7

क्या जेएसएफ 2 समग्र घटकों में विरासत जैसी कोई चीज है?क्या जेएसएफ 2 समग्र घटकों में विरासत जैसी कोई चीज है?

जहां तक ​​मुझे पता है, वहां नहीं है। मैं बस सुनिश्चित कर रहा हूं।

धन्यवाद!

+0

मुझे सटीक उत्तर देने के लिए निश्चित नहीं है, लेकिन मुझे लगता है कि समग्र घटकों में विरासत के प्रतिस्थापन बच्चे के घटक हैं। देखें: http://weblogs.java.net/blog/cayhorstmann/archive/2010/01/30/composite-input-components-jsf – sfrj

उत्तर

5

संयुक्त घटकों की विरासत संभव नहीं है। कोड डुप्लिकेशन से बचने के लिए हमने क्या किया है जेएसएफ 2 समग्र घटक के कार्यान्वयन को सजाने के लिए।

सामान हमारे आवेदन के सभी इनपुट फ़ील्ड द्वारा साझा इस तरह एक डेकोरेटर खाके में प्रदान की जाती है:

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

और समग्र घटक खुद को सजाने के लिए टेम्पलेट का उपयोग करता है:

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

इस तरह जब हम क्षेत्र गुणों (यानी केवल पढ़ने, आवश्यक, शैली, ...) परिवर्तन लाते हैं, तो हमें केवल सजावटी टेम्पलेट को बदलने की आवश्यकता होती है।

संबंधित मुद्दे