Apache
  Home arrow Apache arrow Page 4 - Apache Tapestry and Custom Components: DateInput
Dev Shed Forums  
Administration  
AJAX  
Apache  
BrainDump  
DHTML  
Flash  
Java  
JavaScript  
Multimedia  
MySQL  
Oracle  
Perl  
PHP  
Practices  
Python  
Reviews  
Security  
Smartphone Development  
Style-Sheets  
Web Services  
XML  
Zend  
Zope  
Mobile Linux  
App Generation ROI  
IBM® developerWorks  
Forums Sitemap  
E-Commerce Hosting  
Linux Web Hosting  
Managed Hosting  
Small Business Hosting  
VPS Hosting  
Weekly Newsletter

 
Developer Updates  
Free Website Content 
 RSS  Articles
 RSS  Forums
 RSS  All Feeds
Write For Us Get Paid  
Request Media Kit
Contact Us  
Site Map  
Privacy Policy  
Support  
 USERNAME
 
 PASSWORD
 
 
  >>> SIGN UP!  
  Lost Password? 
Google.com  
APACHE

Apache Tapestry and Custom Components: DateInput
By: Alexander Kolesnikov
  • Search For More Articles!
  • Disclaimer
  • Author Terms
  • Rating: starstarstarstarstar / 11
    2007-06-19


    Table of Contents:
  • Apache Tapestry and Custom Components: DateInput
  • Creating the DateInput Component
  • Creating the Models
  • Wiring everything
  • Implementing PageBeginRenderListener

  • Rate this Article: Poor Best 
      ADD THIS ARTICLE TO:
      error-file:tidyout.log Del.ici.ous error-file:tidyout.log Digg
      error-file:tidyout.log Blink error-file:tidyout.log Simpy
      error-file:tidyout.log Google error-file:tidyout.log Spurl
      error-file:tidyout.log Y! MyWeb error-file:tidyout.log Furl
    Email Me Similar Content When Posted
    Add Developer Shed Article Feed To Your Site
    Email Article To Friend
    Print Version Of Article
    PDF Version Of Article

     
     
    ADVERTISEMENT


    Apache Tapestry and Custom Components: DateInput - Wiring everything
    ( Page 4 of 5 )

    Finally, we need to create a component class. It will bring together all the constituents and make them work together toward the goal that we’ve defined:

    public abstract class DateInput extends BaseComponent implements

       PageBeginRenderListener {

       

        @Parameter(required = true)

        public abstract Date getDate();

        public abstract void setDate(Date d);

      

        private Calendar c = Calendar.getInstance();

       

        public void pageBeginRender(PageEvent event) {

            c.setTime(getDate() == null ? new Date() : getDate());

        }

       

        public IPropertySelectionModel getDaysModel() {

            return new DayModel();

        }

       

        public IPropertySelectionModel getMonthsModel() {

            return new LocalisedMonthsModel(getPage().getLocale());

        }

       

        public IPropertySelectionModel getYearsModel() {

            return new YearModel();

        }

       

        public int getDay() {

            return c.get(Calendar.DATE);

        }

       

        public void setDay(int day) {

            c.set(Calendar.DATE, day);

        }

       

        public int getMonth() {

            return c.get(Calendar.MONTH);

        }

       

        public void setMonth(int month) {

            c.set(Calendar.MONTH, month);

        }

       

        public int getYear() {

            return c.get(Calendar.YEAR);

        }

       

        public void setYear(int year) {

            c.set(Calendar.YEAR, year);

            setDate(c.getTime());

        }

    }

    Most of this code is very simple, but there are a few points that are worth commenting upon. There are three methods returning models to PropertySelection components, and one of them is slightly unusual:

    public IPropertySelectionModel getMonthsModel() {

       return new LocalisedMonthsModel(getPage().getLocale());

    }

    Here you can see how our component gets a reference to the page, onto which it will be placed (the getPage() method is available to every component), and then asks the page for the current Locale. The page’s answer is then passed to the LocalisedMonthsModel constructor, so that the names for the months were shown in an appropriate language.

    Perhaps the most interesting fragment of this code is how we define the parameter required by our custom component:

    @Parameter(required = true)

    public abstract Date getDate();

    public abstract void setDate(Date d);

    You should already be used to abstract getters and setters – our way of asking Tapestry to implement whatever is needed automatically. Here we also clarify that this will be a parameter named date, and this parameter is required. This means that if someone will want to use DateInput, they will need to provide a binding named date, and if they don’t, Tapestry will throw an exception.

    Using the abstract getter, we can obtain in our code the value provided by the page class through the required binding, and when the user submits the results of his or her input, we’ll use the abstract setter to report to the page on which the date was selected.



     
     
    >>> More Apache Articles          >>> More By Alexander Kolesnikov
     

       

    APACHE ARTICLES

    - Creating a VAMP (Vista, Apache, MySQL, PHP) ...
    - Putting Apache in Jail
    - Containing Intrusions in Apache
    - Server Limits for Apache Security
    - Setting Permissions in Apache
    - Installing Apache
    - Apache Installation and Configuration
    - Apache Tapestry and Custom Components: DateI...
    - Tapestry and AJAX: Autocompleter and InlineE...
    - PropertySelection and IPropertySelectionMode...
    - The DatePicker and Shell Components of Apach...
    - Apache Tapestry: ASO and More Components
    - Apache Tapestry and DirectLink, IoC and DI
    - Making a CelebrityCollector with Apache Tape...
    - Apache Tapestry and Listener Methods, Condit...





    © 2003-2009 by Developer Shed. All rights reserved. DS Cluster 4 Hosted by Hostway
    For more Enterprise Application Development news, visit eWeek