<?xml version="1.0" encoding="UTF-8"?>
<chapter id="introduction" xreflabel="introduction">
    <?dbhtml filename="intro.html"?>
    <chapterinfo>
        <keywordset>
            <keyword>RichFaces</keyword>
            <keyword>CDK</keyword>
			<keyword>Guide</keyword>
        </keywordset>
    </chapterinfo>

    <title>Introduction</title>
    <para>
        The major benefit of the JSF framework is a component based architecture. 
        The component in JSF is not just a set of HTML code rendered and interpreted by a browser. 
        The JSF component is a combination of a client-side widget coupled with the server-side object 
        that represents component behavior including data validation, events handling, business layers bean binding, etc. 
    </para>
    <para>   
        Comparing to a page-oriented development approach, 
        JSF allows to use a component-oriented paradigm to build a well-designed, 
        highly customizable UI interface based on reusable components.
    </para>
    <para>
        However, there is not yet enough sets of rich components on the market that might enable the rapid application development. 
        One of the most important problems is a time-consuming and very complicated process of the component creation. 
        Even the very primitive JSF component requires the <property>UIComponent</property> class, 
        <property>Renderer class</property>, <property>Tag class</property>
        and a faces configuration file (<property>faces-config.xml</property>) to be written. 
    </para>
    <para>
        In order to use the component library in a Facelets environment, 
        you should add the <property>*.taglib.xml</property> file to this checklist.
    </para>
    <para> 
        Creation of the rich component takes even more time. 
        You have to provide the <property>ListenerTagHandler class</property>, a class for creating a listener interface,
        an event processing method name in a listener interface, 
        an event class, render specific classes for each possible render kit used with the component.
    </para>
    <para>
        Therefore, the process of JSF component creation is pretty complicated but repeatable. 
        Jonas Jacobi and John R. Fallows in their &quot;Pro JSF and Ajax Bulling Rich Internet Components&quot; book describe 
        the process in details. 
        This description and used approaches are very similar to our own experience and have been used as a methodology 
        for <property>Component Development Kit (CDK)</property> - a sub-project of <property>RichFaces</property>
        that allows you to easily create rich components with built-in Ajax support. 
        
        <!--With version 1.1, Ajax4jsf introduces the Component Factory - a Maven-driven process based on CDK.-->
    </para>
    <para>
        The significant features of the <property>Component Development Kit (CDK)</property> are:
    </para>
    <itemizedlist>
        <listitem>
            <para>
                Quick development start. 
                A new component development starts from a pre-generated component project template. 
                It contains the whole required infrastructure and necessary files generated.
                It&apos;s necessary only to have a <ulink url="http://maven.apache.org">Maven</ulink> installed. 
                All other required stuff will be loaded and configured automatically. For more information about how to 
				work with Maven on JBoss projects explore corresponding <ulink url="http://www.jboss.org/community/docs/DOC-11358">articles</ulink> 
				at JBoss portal.
            </para>
        </listitem>
        <listitem>
            <para>
                Declarative approach for a component development. 
                It&apos;s necessary only to specify meta-data and a code specific for your component. 
                All other required artifacts are generated for you.
            </para>
        </listitem>
        <listitem>
            <para>
                Independent development life-cycle. <property>Component Development Kit (CDK)</property> presumes 
                development of each component isolated from each other with further assembling them into the component library. 
                Hence, this allows to organize a continuous process when one component is already in production condition, 
                but another is just started.
            </para>
        </listitem>
        <listitem>
            <para>
                Possibility to create a first-class rich components 
                with built-in Ajax functionality
                and add Ajax capability to the existing JSF applications.
            </para>
        </listitem>
        <listitem>
            <para>
                Facility for automatic testing. 
                At the moment of generating the initial project structure, 
                the <property>Unit Test classes</property> are also generated. 
                The <property>RichFaces</property> also provides the Mock-test facility that allows to emulate 
                a run-time environment and automatically test components before their are gathered into the result library.
            </para>
        </listitem>
        <listitem>
            <para>
                Optimization for different JSF implementations. 
                As soon as the most part of a result code is generated, the <property>Component Development Kit (CDK)</property> 
                becomes able to generate an implementation specific code along with a universal code. 
                It makes sense if it&apos;s necessary to optimize a result code using features specific for 
                the particular implementation. For example, for using with JSF 1.2 only.
            </para>
        </listitem>
        <listitem>
            <para>
                Create a modern rich user interface look-and-feel with JSP-like templates and skins-based technology.
                RichFaces comes with a number of predefined skins to get you started, 
                but you can also easily create your own custom skins. 
            </para>
        </listitem>
    </itemizedlist>
</chapter>