<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
 "http://www.w3.org/TR/html4/loose.dtd">
<!--
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
   regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
   with the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
-->
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
 <meta name="Author" content="Malcolm Edgar"/>
 <meta name="description" lang="en" content="Apache Click Java web application framework"/>
 <meta name="keywords" lang="en" content="Apache Click, Click, Click Framework, Java, JEE, J2EE, web application framework, open source"/>
 <title>Apache Click</title>
 <link rel="stylesheet" type="text/css" href="../help.css"/>
 <style type="text/css">
   ul { margin-top: 0.5em; }
   li { margin-bottom: 0.25em; }
 </style>
</head>
<body>
  
<h1>Why Click</h1>
<p/>
This topic discusses the design philosophy and background behind Click, and hopefully explains why someone would build
another Java web application framework.
<p/>
<br/>


Click is a modern JEE web application framework, providing a natural rich client
style programming model. &nbsp; Key features of Click include:

<h2>1.&nbsp; Simple to Learn</h2>
Click is designed to be simple to learn so that new developers can get up and running in a day.  This is very important 
with commercial development teams where you have a wide range of skill levels and motivation.
<p/>
To support ease of adoption Click has some of the best documentation available for an open source framework and 
includes many working examples.
<p/>

<h2>2.&nbsp; Component and Page Oriented Design</h2>
If you have done traditional GUI programming with Swing, VB or Delphi you will know that there is something very wrong
with JEE web development. JEE web development is painfully slow, complex and error prone.
<p/>
One of the first generation JEE web frameworks was Struts, which provides a command pattern design and a set of JSP 
tag libs. Unfortunately with Struts you are still down in the weeds, mapping URLs to Actions and working with primitive 
ActionForms.  Its not giving you much leverage at all.
<p/>
Tapestry was one of the first component based JEE web frameworks, introducing component hierarchies, pages and an 
event based programming model.  This is a much more productive way of working, and is what we have come to expect 
when developing desktop GUI applications.
<p/>
The idea with Click was to take this page and component design approach, and make it much easier to use and more 
accessible.
<p/>
Click provides a Page oriented design, featuring Control components and an event based programming model. Click 
includes 40 Controls out of the box, which correspond to the major HTML elements. It's a great way of programming 
more simply.
<p/>
Click Forms and Controls provide automatic validation and rendering, making form development very fast and robust.

<h2>3.&nbsp; JSP &amp; MVC Free</h2>
Click is JSP and MVC Free. This is a good thing! 
<p/>
JSP's combined with the miss application of the MVC pattern have been holding back JEE web development for many years. 
It's a big statement I know, please let me explain.
<p/>
MVC is a desktop GUI design pattern, which supports a separation of roles in UI design. Model is the data, the 
View does the rendering and the Control is for modifying the data.  Now MVC is a fairly sophisticated UI pattern 
which solves the problem of multiple views and controls sharing the same data.  
<p/>
For most UI development however MVC is overkill. The control and the view are usually the same thing.  For example, 
a Select box is the view and the control and also holds the model. In Swing fortunately, most of the MVC design is 
hidden away below the surface.  In VB and Delphi there is no MVC at all.
<p/>
In the early days of JEE web development design patterns were highly coveted, and MVC was grabbed and early Servlet/JSP 
designs were branded as MVC. In their analysis the model was usually a DAO, the view was the JSP and control was a 
Servlet.  
<p/>
The effect of this was to lock in the design concept where the UI MVC roles were strictly separated. This fits well 
with the generalized architectural principle separating layers, and with the fact that JSPs are only really suitable 
for rendering output.
<p/>
Unfortunately the cost of this strict separation was the encapsulation. Most rich client UI components encapsulate
their rendering and control functionality. Click components (Controls) are responsible for both rendering themselves 
(view) and then understanding what they mean (control).
<p/>
To see this concept in action take a simple Click page where we have an ActionLink Control.
<pre class="codeJava">
<span class="kw">public class</span> ExamplePage <span class="kw">extends</span> Page {

    @Bindable <span class="kw">protected</span> ActionLink myLink = <span class="kw">new</span> ActionLink(<span class="kw">this</span>, "<span class="st">onClick</span>");
    
    <span class="kw">public boolean</span> onClick() {
        System.out.println("<span class="st">onClick invoked</span>");
        <span class="kw">return true</span>;
    }
} 
</pre>

We include our <span class="st">myLink</span> ActionLink control in the
HTML page template:

<pre class="codeHtml">
&lt;a href="<span class="st">$myLink.href</span>"&gt;Click Me&lt;/a&gt;
</pre>

At runtime the control <span class="st">href</span> attribute renders as:

<pre class="codeHtml">
&lt;a href="<span class="st">/mycorp/example-page.htm?actionLink=myLink</span>"&gt;Click Me&lt;/a&gt;
</pre>

If the user clicks the link, the ActionLink control invokes the Page's <code>onClick()</code> method. 
<p/>
Conversely with the JSP MVC architecture a JSP can tell you something, but it can't understand what it has just 
said. Think about this for a second. There is no single UI component that is taking responsibility for its own actions. 
Guess where the responsibility then falls to... 
<p/>
You become responsible for wiring up the numerous pieces to make it work. In Struts this can include:
<ul>
   <li>writing a custom <tt>Action</tt> class</li>
   <li>writing a custom <tt>ActionForm</tt> class</li>
   <li>specifying the <tt>action</tt> elements in the <tt>struts-config.xml</tt> file</li>
   <li>specifying the <tt>form-bean</tt> element in the <tt>struts-config.xml</tt> file</li>
   <li>specifying the <tt>form</tt> element in the <tt>validation.xml</tt> file</li>
   <li>specifying the form <tt>field</tt> validation elements in the <tt>validation.xml</tt> file</li>
   <li>ensure all bindings are correct between the XML elements: <tt>action</tt>, <tt>form-bean</tt>, <tt>form</tt>, <tt>field</tt></li>
   <li>specifying the tag lib includes in the JSP file</li>
   <li>specifying the &lt;htm:form&gt; and &lt;html&gt; field tag XML elements and attributes correctly in the JSP file</li>
</ul>

In development of large applications this becomes a voluminous, tedious and error prone task. 
<p/>
Another aspect of these designs is the transfer of logic from Java code into XML configuration files. Tapestry and Spring MVC
also make extensive use of XML. The problem with this is compile time errors now only become apparent at runtime.
Also writing and maintaining large volumes of XML is more difficult than Java code. The Java IDE refactoring
tools are much more sophisticated than the XML tools available.
<p/>
Click enables you to apply Object Oriented design principles such as subclassing to extend other Controls, 
or aggregation to build more sophisticated UI components. For example the Click control <tt>CreditCardField</tt> 
"<i>is a</i>" subclass of <tt>TextField</tt> and "<i>has a</i>" <tt>Select</tt> control for specifying the card type.


<h2>4.&nbsp; Velocity</h2>

For rendering HTML Click uses the Velocity template engine. Velocity has a simple 
instruction set which is very easy to learn and use. 
For example take a look at the template below.

<pre class="codeHtml">
<span class="kw">#if</span> (!<span class="st">$session.order.lineItems.empty</span>)
&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Name&lt;/th&gt; &lt;th&gt;Quantity&lt;/th&gt; &lt;th&gt;Total Price&lt;/th&gt;
  &lt;/tr&gt;
  <span class="kw">#foreach</span> (<span class="st">$lineItem</span> <span class="kw">in</span> <span class="st">$session.order.lineItems</span>)
  &lt;tr&gt;
    &lt;td&gt;<span class="st">$lineItem.name</span>&lt;/td&gt; 
    &lt;td&gt;<span class="st">$lineItem.quantity</span>&lt;/td&gt;   
    &lt;td&gt;<span class="st">$lineItem.totalPrice</span>&lt;/td&gt;   
  &lt;/tr&gt;
  <span class="kw">#end</span>
&lt;/table&gt;
<span class="kw">#else</span>
  No items have been ordered.
<span class="kw">#end</span> 
</pre>

You should have a pretty good idea of what this code does without having to consult any taglib 
documentation. Velocity's ease of use made it the ideal choice for Click. 
<p/>
The one tricky part of Velocity, <i>configuration</i> is handled automatically by Click.
<p/>
Please note that Click's template service is pluggable so you can also use 
<a href="http://freemarker.sourceforge.net/">Freemarker</a> or JSPs for rendering
in Click. It should be said that JSP 2.0 and the JSP Expression Language has
improved the usability of JSP in recent years.

<!-- FOOTER -->
<div id="footer">
    <hr/>
    <p>
    <a target='_blank' href='http://www.apache.org' title='Apache Software Foundation'>
        <img id="asf-logo" src="http://www.apache.org/images/asf-logo.gif" alt="Apache Software Foundation"/>
    </a>
    Copyright &copy; 2001-2010 Apache Software Foundation. Apache Click,
    Click, Apache, the Apache feather logo, and the Apache Click project logo are
    trademarks of The Apache Software Foundation.
    <a href="http://cayenne.apache.org/privacy-policy.html">Privacy policy.</a>
    </p>
</div>

</body>
</html>

