Apache | Jakarta | Tapestry |
Jakarta Tapestry Project DocumentationTapestryJakarta Tapestry - Welcome!IntroductionTapestry is a powerful, open-source, all-Java framework for creating leading edge web applications in Java. Tapestry reconceptualizes web application development in terms of objects, methods and properties instead of URLs and query parameters. Tapestry is an alternative to scripting environments such as JavaServer Pages or Velocity. Tapestry goes far further, providing a complete framework for creating extremely dynamic applications with minimal amounts of coding. Tapestry's approach, using a component object model similar to a traditional GUI, provides the following benefits:
Tapestry is distributed under the terms of the Apache Software License. Tapestry exploits the dynamic nature of the Java language, leveraging the JavaBeans API, as well as servlets and other J2EE technology. Tapestry applications are fast, scalable, robust and powerful. Tapestry components are a combination of a specification file (in XML), an HTML template and a Java class (extending a framework class, with simple additions). Tapestry components are combined together to form larger components or complete Tapestry pages. Tapestry in Print![]() Tapestry in Action is now available from Manning Publications. It is the definitive introduction to Tapestry written by Howard Lewis Ship, the creator of Tapestry. Tapestry has also been described in the print journal The Java Report in the September 2001 issue. Other articles includes the on-line journal OnJava, in November 2001. Tapestry CommunityTapestry has a very active User mailing list, with archives. This is the list for getting help with using the framework. The Developer mailing list is for Tapestry committers and other power users to discuss enhancements to the framework. It also has archives. A Wiki has been set up to discuss Tapestry and plan new features. Jakarta Tapestry - What's NewRelease 3.0-beta-1
[ 18340 ] ApplicationRuntimeException doesn't compile on jdk 1.3. [ 18336 ] Tapestry 2.4a5 - LOGGING images missing for Inspector component [ 18490 ] compile warning for Workbench [ 18013 ] typo in EvenOdd javadoc [ 18607 ] Check for unimplemented abstract methods [ 17904 ] Ongoing LGPL Issues [ 19153 ] Easier way to override validation messages [ 19263 ] Change error message for null parameter [ 18880 ] DatePicker broken under Mozilla Release 2.4-alpha-5
[ 18249 ] file upload using Commons FileUpload [ 17905 ] Link to mailing list and archives is wrong. Release 2.4-alpha-4
Release 2.4-alpha-3
[ 665622 ] net.sf.tapestry.html.Frame uses old DOCTYPE [ 675882 ] option component generates invalid HTML [ 622691 ] Full release [ 679655 ] Upload component very slow on file uploads Release 2.4-alpha-2
[ 594878 ] Deploy Tapestry into JBoss 3.0.4 [ 672743 ] Pages Implementing Listeners cause NPE Release 2.4-alpha-1
[ 653358 ] IPage.getName() == qualified name [ 608768 ] Changes saved AFTER IPage.detach() More ...Jakarta Tapestry - QuotesThis page contains quotes from the Tapestry community, appearing on the Tapestry mailing lists and in online forums such as TheServerSide.com. These entries have been editted for grammar and readability. Dorothy GantenbeinWe used Tapestry to implement the monitoring and administration console for a wireless network management product. Initially, we implemented a demonstration using standard JSP but we realized that JSPs presented difficulties for implementation. Some of our requirements were a very aggressive development schedule, integration with EJB 2.0 beans, ability to write modular reusable components, very reliable, easy code maintenance, internationalization, and of course easier debugging than the generated JSP code. Tapestry met all of our requirements and helped us proceed onto a successful release. After reading the tutorial and reviewing the examples, we started with writing simple components. We started with a StatusImage component. The GIF for the status image should be localized and selected based on standard network status states. Another example of a simple component was a validating IP address text field. The IP address field uses the Tapestry validation framework. After that, we moved onto more complex components like the StatusTable shown in the figure. This table has a varying number of rows depending on the configuration of the product using the Tapestry Foreach component (very cool). This StatusTable makes use of another essential Tapestry component, the Conditional. Looking at the Actions columns, the set of actions is conditional based on the row. All this logic happens in the Java class and is not embedded into our HTML making maintenance much easier. Finally, we integrated servlets and JSPs into our Tapestry web application. We needed servlet integration for charting and JSPs for reporting. With all this flexibility, we could use each technology where they worked best. Overall, all of Tapestry's flexibility along with its clean object-oriented architecture made our web interface shine. Screen shot 1 Screen shot 2Paul WittOf all the web presentation frameworks out there, Tapestry is the most elegant. For me ELEGANT is the goal of a programmer/developer (I've been around awhile). When, in your MVC framework, VIEW is pure HTML, and your CONTROL - controls (wow - nice control; exception/debugger/session handlers they are -- well, elegant) and the link to your model is - often as simple (elegant) as get/set, then the philosophy of web applications has moved to a new and cleaner level. But elegance is a moving target, and Tapestry, with this latest release 3.0, puts me not only on board (I already am) but I've fastened my seatbeat, and I'm ready for takeoff. Miles EganThe learning curve for Tapestry is still somewhat steep ... but I'm really enjoying it now that I'm beginning to get it and, most importantly, I don't feel like I'm writing much, if any, superfluous code. It really seems like all the code directly contributes to functionality and that there's very little boilerplate. One of the hallmarks of a good framework, in my opinion. Andrus AdamchikYou know, Tapestry in fact is different from your average JSP taglib. Anyone who had a chance to use component-based web frameworks (like WebObjects, I don't know any other in this category) would know what I am talking about. This is a *different* and highly powerful and convenient way of doing things. Surprisingly enough with so many web application layers out there, Tapestry seems to be the only one (OpenSource, that is) that allows you to create a set of reusable components and build the design around this. The level of reuse is unmatched with anything JSP. In many ways it is even stronger than commercial implementation of the same design idea (WebObjects). In particular it makes it extremely easy for graphics designers to modify HTML, since dynamic content does not use *any* custom tags. Also the amount of code (and time) it takes to hook up an average model layer to the HTML presentation is so small that at first you may think you've missed something along the way :-). Chris WilsonDavid SolisTapestry is the best solution to the presentation tier and it provides a clean separation of content and developer code. First, I extended it for WAP support, then I developed several WAP components and finally I developed a complete email application for WAP in record time. Jim BirchfieldWhen using Struts or Velocity, in order to see what the finished page will look like, our graphic designers must assemble the application, deploy it ... they basically lose all the luxuries of WYSIWYG development ... I spent 30 minutes or so with one of our graphic designers here, and he was giddy at what I showed him as I redesigned one of our smaller apps using Tapestry. Bottom line for us is this: We have graphic designers and we have developers, and I don't want them to necessarily have to know each others' job to get things done. Tapestry is the best framework I have seen that offers this sort of separation. Jiri LundakAs a 'lay developer' using Tapestry I can only recommend it. We have built a content management system based on Tapestry, plus multiple sites that are now powered by it. Thanks to its component architecture, we are able to publish any kind of our metadata-driven business objects with just a handful of generic, highly dynamic pages, using customizable components. All business logic is encapsulated in business objects and services, so there is not really much logic in the presentation layer besides the navigation parts. The learning curve is not flat, but is really worth the effort. If you need to bring a dynamic web-app to the browser Tapestry offers many predefined and stable components to build on. We have gone with Tapestry and we will continue to use it in the next couple of projects needing a web-interface, too. Malcom EdgarI just wanted to send you a quick note of appreciation for your Tapestry framework. It is a truly original and innovative approach. While the learning curve is steep compared to thinner webapp frameworks, I have found it is well worth the effort. The amount of code I am having to write is greatly reduced and I am achieving a much greater level of reuse. Mind BridgeI just want to second the positive comments about Tapestry. We have evaluated a lot of frameworks in the past couple of years, and in our opinion Tapestry is the only open source Java framework at the moment that provides everything necessary for Web-centric component oriented development. The most important feature of Tapestry is indisputably the ability to package common Web functionality into components that can then be effortlessly reused again and again. Building a Tapestry application is pretty much like playing with Lego bricks -- all you have to do is just fit the different pieces together and not worry about how each brick would work internally or how the different pieces would interract with one another (an OO approach at its best). As a result, after gaining some experience and accumulating a set of components, one can build incredibly complex Web applications quickly and easily, and yet be assured that those applications are of a very high quality. Tapestry has another major advantage as well -- it provides very clean separation between presentation and logic (cleaner than that of the most commonly used frameworks). The design of its templates is also very mindful of the actual web development process, accomodates very nicely the work of the web designers from the start, and allows them to play along even in later stages of the application development. This, again, is something rarely found in the other frameworks. I will mention just one more superb feature -- the Tapestry design and APIs provide a huge number of extension points that allow you to customize the behaviour of the framework almost to no end. In order to achieve a specific goal for one customer we twisted the behaviour of the system so much, that Howard would faint if he sees it. In any case, being able to easily modify and extend specific elements of the framework is a major advantage. This may sound a bit like an advertisement, but it is not -- we are just very satisfied users. We've got a significant increase in productivity, we've got increased quality, we've got happy web designers, and we've put an end to the repetitive operations -- it would be hard to think of a better scenario. If you are experienced in OO and/or components and care about Web development, I would suggest that you have a look at Tapestry. I would be very surprised if you do not find it a far more viable solution for your needs than JSP or Struts, for example. Luis NevesActually what drove me to Tapestry wasn't the saved development time, it was the sheer beauty of it :-) I come from an ASP/VB background and I was getting sick and tired of that mess, designers constantly asking me "Is it OK to move this part of code to the bottom of the page?" , "Could you take a look and see if I didn't mess anything when I added the picture?", "Ohh, I'm sorry. that was an include file, I thought it was just a comment" ... well you get the picture, and tools like Dreamweaver only help to some extent. The perfect separation of roles was what drew me to Tapestry ... the rest of the things (and there are a lot of them) were the iceing on the cake. Adam GreeneThe company that I work for did a research project with the National Research Council of Canada, and we spent several months reviewing web services, J2EE, and Database systems for a technical risk project that we were doing. Out of that we learned 3 things:
I will give you an example. We have a "legacy" project that is done in JSP (all of our development efforts have moved to Tapestry). We had to perfect the logic of the project while the text and look of the project was still in flux. Everytime our graphics guys fixed the pages, code would get damaged, or vice versa. Everytime our graphics guys created new pages, our programmers would have to go mark up the pages with code and could not work on the logic of the given page until after our graphics guy had finished it. On top of that the whole system has to be translated into French. Which means that we not only have doubled our work, we have actually ended up tripling it, pushing back deadlines, etc. If it had not been for the fact that we "inherited" the code, it would have been done in Tapestry to start with, because:
If you are using a language or framework that puts proprietary (non-HTML) code into your templates or HTML files, I seriously suggest that you take a look at the approach that Tapestry takes as you will probably find that it is quite revolutionary in its approach to web development (as stated above). So take it from someone who just researched existing and upcoming technology for three months, Tapestry frags the snot out of frameworks like JSF, Struts, and the like. I will give Apache one thing though, they have built a lot of production quality software that beats even Microsoft. We added Torque to Tapestry to fill a void in the database support (Tapestry by itself has no database support) because Tapestry's model fit so perfectly that I can actually create a web page to display all the records in a table using only 14 lines of Java code, of which less than half (only 6 lines of code) are actually hand written (the rest are auto-generated by Eclipse). So I guess that is another point for Tapestry: Integration of other packages / APIs that support a Java Beans style is a no-brainer. No taglibs need to be written, no new scripting needs to be created, it simply works. Jakarta Tapestry - DocumentationTapestry API DocumentationTapestry Component ReferenceTutorialOut of date
This Tutorial is out of date, and work to replace it is
currently taking place.
Developer's GuideOut of date
This document is out of date, and is being replaced with a new
User's Guide.
User's GuideIncomplete
This document is currently being constructed and is incomplete. It is a replacement
for the Developer's Guide.
Contributor's GuideJakarta Tapestry - FAQsQuestions
Answers1. General Tapestry Information1.1. How does Tapestry compare to other frameworks?Tapestry is very much unlike most other frameworks in that it doesn't use code generation; instead it uses a true component object model based on JavaBeans properties and strong specifications. This gives Tapestry a huge amount of flexibility and enables dynamic runtime inspection of the application with the Tapestry Inspector (a mini-application that can be built into any Tapestry application). In addition, Tapestry applications require far less Java coding and are far more robust than equivalent applications developed with other popular frameworks. This is because the Tapestry framework takes responsibility for many important tasks, such as maintaining server-side state and dispatching incoming requests to appropriate objects and methods. The many new features of release 3.0 mean that Tapestry is not only the most powerful web application framework available, it is also the fastest and easiest to adopt, regardless of whether your background is Java, Perl, XML or PHP! 1.2. How is the performance of Tapestry?My own testing, documented in the Sept. 2001 issue of the Java Report, agrees with other testing (documented in the Tapestry discussion forums): Although straight JSPs have a slight edge in demo applications, in real applications with a database or application server backend, the performance curves for equivalent Tapestry and JSP applications are identical. Don't think about the performance of Tapestry; think about the performance of your Java developers. 1.3. Is Tapestry a JSP tag library?Tapestry is not a JSP tag library; Tapestry builds on the servlet API, but doesn't use JSPs in any way. It uses it own HTML template format and its own rendering engine. Starting with release 3.0, Tapestry includes a simple JSP tag library to allow JSP pages to create links to Tapestry pages. 1.4. What does it cost?Tapestry is open source and free. It is licensed under the Apache Software License, which allows it to be used even inside proprietary software. 1.5. Is there a WYSIWYG editor for Tapestry, or an IDE plugin?Currently, no WYSIWYG editor is available for Tapestry; however, the design of Tapestry allows existing editors to work reasonably well (Tapestry additions to the HTML markup are virtually invisible to a WYSIWYG editor). Spindle is a Tapestry plugin for the excellent open-source Eclipse IDE. It adds wizards and editors for creating Tapestry applications, pages and components. 1.6. Does Tapestry work with other other application servers besides JBoss?Of course! JBoss is free and convienient for the turn-key demonstrations. You can download Tapestry and JBoss and have a real J2EE application running in about a minute! The scripts that configure JBoss are sensitive to the particular release of JBoss, it must be release 3.0.6. However, Tapestry applications are 100% container agnostic ... Tapestry doesn't care what servlet container it is used with and does not even require an EJB container. 2. Technical Questions2.1. I have to restart my application to pick up changes to specifications and templates, how can I avoid this?Start your servlet container with the JVM system parameter org.apache.tapestry.disable-caching set to true, i.e., -Dorg.apache.tapestry.disable-caching=true. Tapestry will discard cached specifications and templates after each request. You application will run a bit slower, but changes to templates and specifications will show up immediately. This also tests that you are persisting server-side state correctly. 2.2. What is "line precise error reporting"?Tapestry applications are built from templates and specifications. It's natural that when these templates and specifications are read, any syntax errors are reported, and the precise file and location is identified. Tapestry goes far beyond that! It always relates runtime objects back to the corresponding files so that even runtime errors report the file and location. ![]() For example; say you bind a parameter of a component that expects a non-null value, but the value ends up being null anyway, due to a bug in your code or your specification. Tapestry can't tell, until runtime, that you made a mistake ... but when it does, part of the exception report will be the line in the template or specification where you bound the component parameter. Zap! You are sent right to the offending file to fix the problem. Other frameworks may report syntax errors when they parse their specifications, but after that, you are own your own: if you are lucky, you'll get a stack trace. Good luck finding your error in that! Tapestry gives you a wealth of information when unexpected exceptions occur, usually more than enough to pinpoint the problem without having to restart the application inside a debugger. 3. Other Frameworks3.1. How do I intergrate Tapestry with Spring?Spring is a popular service framework. Colin Sampaleanu has written a integration document on using these two open-source frameworks together. Todo ListRelease 3.0
Release 3.1
History of ChangesVersion 3.0-beta-4 (unreleased)
Jakarta Tapestry - DevelopersJakarta Tapestry - DevelopersTapestry is a community project, and now follows the Apache Software Foundation meritocracy rules to guide its future development. Tapestry Developers plan features, discuss and vote on the Tapestry Developers' Mailing List. The following are the current Tapestry committers. Mind BridgeNeil ClaytonErik HatcherHarish KrishnaswamyRichard Lewis-ShellHoward Lewis ShipGeoff LongmanDavid SolisProjectUseful InformationDownloadsRelated ProjectsWhole Site |