DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
How to get started
In order to quickly get up to speed on Tapestry 5, there are numerous information sources besides this Wiki available:
- The Tapestry Tutorial
- Tapestry for Nonbelievers
- Getting Started (using the Maven Archetype)
- Tapestry site and Component reference
- Search the mailing list with Google by including Google entry: "YOUR KEYWORDS T5 site:mail-archives.apache.org/mod_mbox/tapestry-users/"
- Tapestry 5 Training - Tapestry 5 overview with practical work
- Tapestry 5 Blogs - A list of blogs dealing with Tapestry 5
- Open Source Apps - List of Tapestry 5 open source applications
Preparing your development environment
- Useful configurations for development - Tapestry 5 configurations that will make your development easier
- Using Eclipse and Jetty
- Using Eclipse and Jetty with Jetty Runner
- Using IDEA and Jetty
- Running via a main class in any IDE
- Eclipse code templates
- !IntelliJ IDEA live templates
- Create a skeleton Tapestry 5 project and run it (Eclipse, Maven, m2eclipse)
- Eclipse template editing - Customize Eclipse for Tapestry .tml template editing
- Eclipse Code Completion - Using Eclipse JSP editor and custom tld file for code completion
Components
- Components Reference
- Jumpstart - Components configuration examples
- Check Out the Source Code - Examples and Demos of many components in the source code, like the Palette, Grid, BeanEditForm, etc.
- Creating Your Own Components - Creating your own components is really simple, and fun to do as well. (This example implements a www.dhtmlgoodies.com drag-and-drop-folder tree component)
- Creating Your Own Component Library - Steps to create a reusable library (JAR) of T5 components.
- Outputting Locale-formatted Numbers - Creating a new component for formatting (numbers) according to locale, using literals (integer, decimal or currency). It's based on Output component.
- Creating a Tab Panel - Explains how to create a tab panel.
- Submit with Context - A Submit component that passes a context
- Submit with Context and Navigation - A Submit component that passes a context and allows event handler to return navigational object.
- "Any" Component - A deprecated but still useful component that does ... nothing (by default)
- Image Component - Another deprecated component that's useful for making "previewable" templates
- Tapestry 5 Components - By Shing Hing Man
- Tapestry 5 components at Google Code - Several projects with Tapestry 5 components – share your components here.
- Tree Component - A tree component based on DHTMLgoodies.com's drag 'n drop folder tree
- Enhanced Palette Component - Based heavily on the existing core palette and uses Matt Kruse's Option Transfer JavaScript (Works in IE!)
- Palette Events - How to invoke a JavaScript function when the selected items are added/removed/reordered in a Palette
- Grid Component Tricks - Some tricks using the Grid component
- Tapestry 5 and JavaScript Explained - A detailed look at how Tapestry 5 integrates JavaScript into your application. In this article we create a mixin for adding a JavaScript confirmation box to link components, explaining each step.
- Advanced Layout Component - A sophisticated Layout component
- Simple And Powerful Layouts - Creates flexible layouts, using a simple reusable component.
- Layout with Menu - Layout with added menu bar
- Enum as Component Parameter - Defining a new enum as a component parameter, and adding the string -> enum type coercion for it
- Captcha
Code snippets
General
- How to Format Date/Time, etc - How to format Date, Time, timestamps, Decimals, Numbers, Currencies
- Localized Date Field - How to create a localized DateField for BeanModel.
- Outputting Raw Html - How to output raw, unfiltered HTML
- Linking To Non Tapestry URIs - How to link to non-Tapestry URIs (useful for Acegi integration)
- Obtaining the HttpServletRequest - How to obtain the HttpServletRequest, HttpServletResponse and HttpSession if you really need them
- Creating A Property Edit Block - Explains how to create a property editor and contribute it to the BeanEditForm.
- How to Use Forms - Examples of how forms are connected to methods in your code.
- Exception Page - Displaying your own exception page.
- Redirect Exception - Redirect to another URL from anywhere inside a page or component.
- Using Tapestry For Custom Error Pages - How to serve a custom 404 page, or other error, using Tapestry
- Changing Locale - Change the locale of the user.
- Including JavaScript - Explains how to add your own custom JavaScript functions.
- Integrating jQuery - Include jQuery and it's plugins to spice up your pages!
- Making a Basic Crud App show you how easy is the conception of a CRUD cycle with Tapestry 5
- Running Tasks in a Separate Thread - run a task (Runnable) in a separate thread
- Running Tasks in a WorkQueue - run multiple task through a WorkQueue with one or more threads
- Using a Persistent Field Strategy - How to create a PersistentFieldStrategy for the Persist annotation.
- Adding Validators - How to add your own validators to tapestry
- Outputting XHTML - How to override the default markup model to always use XHTML compliant tags
- Reading Symbols From a Property File - How to have symbols coming from a property file and how to use them in your pages/components
- Getting the Webapp Path - How to get the real path of the webapp directory.
- Reading a File from Webapp Context - How a service reads a file from web app context folder
- Using Tapestry Test - How to actually use Tapestry test
- Visualizing the Component Hierarchy - How to visualize the component hierarchy just on your pages in the browser
- Conditionally Rendering Attributes - How to conditionally render HTML tag attributes in Tapestry templates
- Send Error Page as Email - How to send a dev-mode error page in an production-mode environment (tap version 5.2.6)
- Get an HTML String from a render command parameter - How to use tapestry's rendering engine to convert a parameter specified in TML to a serverside HTML string
Select Components
- Displayable Selection Model - A selection model for objects that implement an interface. Used for select components and more.
- Select Component Alternative - An alternative implementation of the Select core component based on the Daniel Jue's GenericSelectionModel and GenericValueEncoder classes.
- Multiple-Select Component - Explains how to build a multiple select component based on Daniel Jue's GenericValueEncoder classes.
- Selecting with Objects - another example on how to make <SELECT> filled with objects
- Selecting with Objects, #2 - yet another example with on how to make <SELECT> on objects, now with annotations.
Inversion of Control (IOC)
- Using Tapestry-IoC Alone - Example of using tapestry-ioc standalone (without web part). And the same, but with tapestry-hibernate added Tapestry5HowToIocAndHibernate
- Creating a Dispatcher - How to create a completely transparent access control system by implementing a Dispatcher.
- Creating a Dispatcher, part 2 - A supplemental article showing how to access request-specific data (ASOs) from a singleton service. To demonstrate we expand on the code shown in the first article.
- Decorating a Service - An example of a simple service decorator
- Creating a Configurable Service - How to use symbols to create a sandbox and production version of a service. Requires Tapestry5HowToReadSymbolsFromPropertiesFile (PayPal example)
Binding Prefixes
Bindings are used in templates ${message:myMessageKey} or as attribute to components <t:mycomponent value="literal:Hello world"/> to access message in resource bundles, properties, pass String literals and many more. The following pages explain how to write your own bindings.
- Adding a "list:" Binding Prefix - An example of a list: binding prefix. Useful for Action/Event/PageLink context etc.
- Adding a "map:" Binding Prefix - An example of a map: binding prefix. Useful for supplying key=value pairs to components.
- Adding a "cycle:" Binding Prefix - An example of an cycle: binding prefix. Makes zebra effect simple to do
<t:grid .... rowClass="cycle:line1,line2"> - Adding a "messageformat:" Binding Prefix - Describes how to add a messageformat prefix for specifying values for use in messages inline.
Localization
- Domain-level Localization - An example of how to overwrite the Locale domain-dependent
- Changing Locale - Change the locale of the user.
- Outputting Locale-formatted Numbers - Creating a new component for formatting (numbers) according to locale, using literals (integer, decimal or currency). It's based on Output component.
Streaming Data
- Creating Pie Charts in a Page - An example of dynamic charts inside a page (Using StreamResponse)
- Creating a Simple Graph Component - An example of simple pie chart component (Using StreamResponse)
- Creatinga Generic Graph Component - A component that takes in a JFreeChart as a parameter
- Creating a Dynamic PDF - A simple example of how to return a dynamically generated PDF from an event (Using StreamResponse)
- Streaming an Existing Binary File - A simple example of how to stream an existing file, like an image. (Using StreamResponse)
Integration with other frameworks
- Module Registry - List of different extensions and modules
Hibernate
- Using Tapestry-Hibernate - Example/Tutorial of how to use Tapestry-Hibernate in your code.
- Using Tapestry-IoC and Tapestry-Hibernate Standalone - Example of using tapestry-oc+tapestry-hibernate standalone (without web part).
- First Project with Tapestry 5, Spring & Hibernate - A translation of a french article about integrating Spring, Hibernate and Tapestry
- Manipulating Classes at Runtime show you how easy is to add class methods at runtime.
- Using HibernateGridDatasource how to use the HibernateGridDatasource class from tapestry-hibernate module.
- Using HibernateGridDatasource with HQL simple hibernated grid datasource using HQL (Hibernate Query Language).
- Using HibernateGridDatasource with Criteria API simple hibernated grid datasource using hibernate criteria API.
- Flexible Abstract GridDataSource very flexible abstract GridDataSource for using any org.hibernate.Query object, so you can use HQL, SQL, Criteria, DaO, etc.
- Brainless Entity Timestamping - How to have entities automatically time stamped using tapestry-hibernate, simply by adding certain fields!
- Avoiding Lazy Initialization Exceptions - How to avoid "Lazy Initialization" exceptions
- Avoiding DOWSID Exceptions - How to avoid "Different Object with same ID" exceptions
JPA
Spring
- Integrating with Spring - How to inject Spring beans into Tapestry pages and components
- Integrating with Spring and JPA - Quick tutorial on using Tapestry with Spring Transactions and JPA
- Integrating with Spring Transactions - brief tutorial of how to integrate Tapestry5 components with Spring transactions.
- Testing with Tapestry-Spring - How to test Tapestry pages which use Spring Beans
Google Web Toolkit (GWT)
- Integrating with GWT - An example based heavily on Pär Dahlberg's blog example on http://www.pmdit.se/blog, with generalized design tips.
EJB / JEE
- Support @EJB Annotation - Support @EJB Annotation in Tapestry pages / components
Security
Security is the condition of being protected against danger, loss, and criminals.
Authentication and Authorization related
- Using Acegi Security and CAS - Francois Armand explains how he combines T5, Acegi Security and CAS (A Central Authentication Service, providing intranet single sign-on).
- Securing Pages with ACEGI Annotations - How to secure Tapestry5 pages with Java5 annotations using the Acegi security framework
- Securing Pages with ACEGI XML - How to use Acegi Security with Tapestry 5, in the classical way (no annotations, some XML)
- Controlling Access with Annotations - Another supplemental article based on Tapestry5HowToCreateADispatcher2 showing how to control access to pages based on an annotation.
- Securing with ACEGI & LDAP - How to protect you application using Acegi and LDAP
- Securing with Spring & LDAP - How to protect you application using Spring Security and LDAP
- Spring Security & OpenID - How to provide OpenID authentication to your clients using tapestry-spring-security
- Mitigating Login Attacks - How to track failed logins and mitigate brute force or dictionary attacks
Integrity
- Preventing Cross-site Request Forgeries - How to protect against 'Cross-site request forgeries' (CSRF)
- Preventing Client Side Changes - How to protect server side generated values against client side changes using a HMAC
Bug workarounds / patches
- Using UTF-8 Encoding - How to use UTF-8 encoding to support foreign characters
- Root Path Empty Response Patch - A runtime patch for the root path empty response bug
- TAPESTRY-1745 - Tapestry5.0.5 Palette Component IE Bug Patch
- Running Tapestry on JBoss 5 - How to run Tapestry 5 on JBoss 5
- Running Tapestry on JBoss 6.0 - How to run Tapestry 5 on JBoss 6.0
- Running Tapestry on JBoss 6.1 - How to run Tapestry 5 on JBoss 6.1
- Running Tapestry on JBoss 7.1 - How to run Tapestry 5 on JBoss 7.1
- Running Tapestry on WebSphere - How to tun Tapestry 5 on Websphere (6.1)
- Tapestry5 bug tracker
Meta info
- Quickstart with Maven 2.0.6 - If you've had some trouble getting maven2.0.6 to compile the quickstart, here's how to do it.
- Where to Store External Resources - Where to store resources like CSS, JS and Images in your application
- Where to Store Configuration Resources - Where to store resources like Hibernate configuration files, logging properties, and web application context information in your application
- Searching the Mailing List - Force Google to only search the mailing list (results found in these lists are often hidden due to the limited #links)
- Overriding the Default Error Message Banner - How to override the default error message banner
- Dealing with Trolls - How to deal with trolls on the list, and one in particular
Coding traps
- How Not to Make a Custom Component - If you are making a custom component, there are few things you shouldn't do...
- Component Class Resolver Error - When organizing your component (or page) directories, pay special attention!
- Caveats - or more literally, "let him beware".
How to contribute
IRC
Chris Lewis mentioned Tapestry's IRC: #tapestry AT irc.freenode.net: "There's usually 5 ~ 8 of us in there, and we work/talk about Tapestry."
Please add more 'how tos'. Remember to prefix the page name with Tapestry5.