Apache Click has become a new Apache Top Level Project (TLP),
signifying that Click is a well-governed project under the Apache
Software Foundation principles.

Click 2.1.0 has been released sporting many new features, including
support for Google
App Engine
, a free Java hosting environment from Google.

New features and improvements:

  • Added support for Google
    App Engine
    , a free Java hosting environment from Google.
    This provides an ideal environment for students and startups
    to easily host their Click applications online. See GoogleAppEngineListener
    for details [560].
  • Added support for an in-memory File
    Upload Service
    that can be used for uploading files in a
    App Engine
  • Added support for templates with custom extensions through the
    new ConfigService.isTemplate
    method. The default ConfigService implementation,
    XmlConfigService, provides support for the extensions .htm
    and .jsp, but new extensions can be provided in a
    subclass. See the JavaDoc
    for details [568].
  • Added support to the Page class for
    conditionally including Control head
    through the new method includeControlHeadElements
  • Added support to deploy resources inside JARs
    from the Servlet 3.0 compliant location, META-INF/resources.
    Click's own pre-packaged resources are now also located in
    the JAR under META-INF/resources [570].
  • Added new Calendar popup to DateField. This
    Calendar popup uses Calendar Date Select
    which is based on the Prototype JavaScript library.

    Please note if you don't want a dependency on the
    Prototype library you can use the third-party Click Calendar

  • Added
    first class support for HEAD elements such as JavaScript and Css.
    The following classes were added: Element,
    and CssStyle.
    A new method was added to Page and Control: Control.getHeadElements()
    and Page.getHeadElements()
  • Added SubmitLink
    control that can submit a Form [519].
  • Added HiddenList
    control for rendering and submitting a list of hidden fields
  • Added pluggable security access controller (AccessController)
    to Menu class. This pluggable interface enable use of
    security frameworks such as Spring Security (Acegi) or JSecurity to
    control user access to Menu items. This issue was raised by
    Demetrios Kyriakis [406].
  • Added an Ant task, called DeployTask, for
    deploying static resources at build time. This task is useful
    when deploying Click applications in restricted
    environments. For more details see the section: deploying
    resources in a restricted environment
  • Added a ResourceService,
    for serving static resources at runtime. This service is
    useful when deploying Click applications in restricted
    environments. For more details see the section: deploying
    resources in a restricted environment
  • Added method, ClickUtils.createTemplateModel,
    which returns a template model containing objects such as the
    Context path, Page path, HTTP request, HTTP response, HTTP
    session etc.
  • Added ability to
    specify a custom TreeNode icon through the new method
    This issue was raised and fixed by Tim Hooper [494].
  • Added method Format.url
    for encoding URL's in templates [399].
  • Added method FieldColumn.setProperty
    that can be overriden to provide custom binding for complex
    domain objects. This issue was raised and fixed by WarnerJan
    Veldhuis [528].
  • Added TypeConverter configuration option to
    ClickServlet. See getTypeConverter()
    method for details. This issue was raised Joseph Schmidt and
    fixed by Adrian A. [539].
  • Added Slf4jLogService
    for supporting multiple application servers. This
    issue was raised Oliver Burn [555].
  • Added @Bindable
    annotation support for page field autobinding. @Bindable
    supports public, protected and private Page variables
  • Added property files with
    translation for the Russian language. This issue was raised and
    fixed by Andrey Rybin [607], [611].
  • Added new Tree methods setWidth
    / getWidth
    and setHeight
    / getHeight.
    Also fixed rendering issues in IE6/7 for long node labels that
    overflow the tree width [616].
  • The click.dtd has been published to
  • If you want your configuration to conform to
    the click.dtd, include the following declaration in your
  • Improved Form validation to allow Form
    subclasses to override the validate
    method and implement cross-field validation. The following
    changes were made: the previous validate method was
    renamed to validateFileUpload
    and a new empty validate
    method was introduced, that can safely be overridden in
    subclasses [572].
  • Improved Page redirect to support parameters.
    See the new Page methods setRedirect(String,
    and setRedirect(Class,
    This issue was raised and fixed by Adrian
  • Improved Link Controls to support multivalued
    parameters through the new AbstractLink methods getParameterValues()
    and setParameterValues()
  • Improved Table to support very large datasets
    by promoting the methods getFirstRow()
    and getLastRow()
    as public. These methods provide the necessary information to
    only retrieve the displayed rows [504].
  • Improved LinkDecorator to
    support target identfier property parameter names. This issue
    was raised by Demetrios Kyriakis and fixed by fixed by Adrian A.
  • Improved PickList methods getValueObject()
    and setValueObject(Object)
    to delegate to getSelectedValues()
    and addSelectedValue(String)
    respectively [490].
  • Improved Spring integration with SpringClickServlet
    and PageScopeResolver,
    supporting Spring instantiated Pages with @Component
    configuration [534].
  • Improved CompressionServletResponseWrapper
    and CompressionResponseStream classes to have public
    visibility to enable use in custom servlet Filters [547].
  • Improved Menu control to
    render attribute class="selected" when the menu item is
    selected. This issue was raised and fixed by Frederic Daoud [551].
  • Improved PerformanceFilter to
    implement exclude-paths filtering [498].
  • Improved XmlConfigService to scan for
    deployable resources inside folders on the classpath
  • Improved Cayenne DataContextFilter, including
    adding support for LifecycleListener registration
  • Improved AbstractLink
    to allow rendering of both icon and label in Link controls
    (default behavior renders either a label or an icon)
  • Improved Page and Control message handling
    with null args. This issue was raised by WarnerJan Veldhuis
  • Fixed resource deployment on JBoss 5 and up.
    The solution is based on the work done by the Stripes
    developers [589].


third-party libraries:

  • Update Velocity library to version 1.6.3.
  • Update Cayenne library to
    version 3.0M6.
  • Update Prototype.js
    library to version 1.6.1.

New Documentation:



The Click team