Author: hlship
Date: Sat Jul 19 10:33:22 2008
New Revision: 678187
URL: http://svn.apache.org/viewvc?rev=678187&view=rev
Log:
TAPESTRY-2480: Migrate Tapestry "what's new?" and upgrade information up to the
project level
Added:
tapestry/tapestry5/trunk/src/site/apt/cookbook/
tapestry/tapestry5/trunk/src/site/apt/cookbook/defaultparameter.apt
tapestry/tapestry5/trunk/src/site/apt/cookbook/index.apt
tapestry/tapestry5/trunk/src/site/apt/cookbook/informals.apt
tapestry/tapestry5/trunk/src/site/apt/upgrade.apt
- copied, changed from r673794,
tapestry/tapestry5/trunk/tapestry-core/src/site/apt/upgrade.apt
tapestry/tapestry5/trunk/src/site/apt/upgrade4.apt
- copied unchanged from r673794,
tapestry/tapestry5/trunk/tapestry-core/src/site/apt/upgrade4.apt
Removed:
tapestry/tapestry5/trunk/tapestry-core/src/site/apt/upgrade4.apt
tapestry/tapestry5/trunk/tapestry-ioc/src/site/apt/upgrade.apt
Modified:
tapestry/tapestry5/trunk/src/site/apt/dev/env.apt
tapestry/tapestry5/trunk/src/site/fml/faq/general.fml
tapestry/tapestry5/trunk/src/site/site.xml
tapestry/tapestry5/trunk/tapestry-core/src/site/site.xml
tapestry/tapestry5/trunk/tapestry-ioc/src/site/site.xml
Added: tapestry/tapestry5/trunk/src/site/apt/cookbook/defaultparameter.apt
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/cookbook/defaultparameter.apt?rev=678187&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/src/site/apt/cookbook/defaultparameter.apt (added)
+++ tapestry/tapestry5/trunk/src/site/apt/cookbook/defaultparameter.apt Sat Jul
19 10:33:22 2008
@@ -0,0 +1,52 @@
+ ---
+ Default Parameter
+ ---
+
+Default Parameter
+
+ Many of components provided with Tapestry share a common behavior: if the
component's
+ id matches a property of the container, then some parameter of the component
(usually <<<value>>>)
+ defaults to that property.
+
+ This is desirable, in terms of not having to specify the component's id and
then specify the
+ same value as some other parameter.
+
+ Making this work involves two concepts: default parameter methods (methods
that can
+ compute a default value for a parameter), and
+ a service,
+
{{{../apidocs/org/apache/tapestry5/services/ComponentDefaultProvider.html}ComponentDefaultProvider}}.
+
+ Let's say you have a component, OutputGadget, whose job is to output some
information about
+ an entity type, Gadget.
+
+---
+public class OutputGadget
+{
+ @Parameter(required=true, principal=true)
+ private Gadget gadget;
+
+ @Inject
+ private ComponentDefaultProvider defaultProvider;
+
+ @Inject
+ private ComponentResources resources;
+
+ Binding defaultGadget()
+ {
+ return defaultProvider.defaultBinding("gadget", resources);
+ }
+}
+---
+
+ This can now be used as \<t:outputgadget t:id="currentGadget"/\>, assuming
currentGadget is a property
+ of the container.
+
+ If there is no matching property, then the defaultGadget() method will
return null, and a runtime exception
+ will be thrown because the gadget parameter is required and not bound.
+
+ The principal attribute on the Parameter annotation is not needed in the
specific case; in some cases,
+ a default for some other parameter may be based on the bound type of another
parameter, the principal
+ attribute forces the paarameter to be resolved first. In many Tapestry form
components, the value
+ parameter is principal, so that the validate and translate parameters can
computer
+ defaults, based on the
+ type and annotations bound to the value parameter.
\ No newline at end of file
Added: tapestry/tapestry5/trunk/src/site/apt/cookbook/index.apt
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/cookbook/index.apt?rev=678187&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/src/site/apt/cookbook/index.apt (added)
+++ tapestry/tapestry5/trunk/src/site/apt/cookbook/index.apt Sat Jul 19
10:33:22 2008
@@ -0,0 +1,6 @@
+ ----
+ Tapestry 5 Cookbook
+ ----
+
+ The Tapestry Cookbook is a collection of tips and tricks for commonly
occuring
+ patterns in Tapestry.
Added: tapestry/tapestry5/trunk/src/site/apt/cookbook/informals.apt
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/cookbook/informals.apt?rev=678187&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/src/site/apt/cookbook/informals.apt (added)
+++ tapestry/tapestry5/trunk/src/site/apt/cookbook/informals.apt Sat Jul 19
10:33:22 2008
@@ -0,0 +1,91 @@
+ ----
+ Supporting Informal Parameters
+ ----
+
+Supporting Informal Parameters
+
+ Informal parameters are additional parameters beyond the formal parameters
+ defined for a component using the
+ {{{../apidocs/org/apache/tapestry5/annotations/Parameter.html}Parameter}}
+ annotation.
+
+ A component that closely emulates a particular HTML element should also
+ support informal parameters. You'll find that many of the built-in
+ Tapestry components, such as Form, Label and TextField, do exactly that.
+
+ Normally, specifying additional parameters for a component, beyond its
+ formal parameters, does nothing: the additional parameters are ignored.
+
+ The
+
{{{../apidocs/org/apache/tapestry5/annotations/SupportsInformalParameters.html}SupportsInformalParameters}}
+ annotation is used to identify a component for which informal parameters
+ are to be kept.
+
+ The example is an Img component, a replacement for the \<img\> tag.
+ Its src parameter will be an asset.
+
+----
[EMAIL PROTECTED]
+public class Img
+{
+ @Parameter(required=true, allowNull=false,
defaultPrefix=BindingConstants.ASSET)
+ private Asset src;
+
+ @Inject
+ private ComponentResources resources;
+
+ boolean beginRender(MarkupWriter writer)
+ {
+ writer.element("img",
+ "src", src);
+
+ resources.renderInformalParameters(writer);
+
+ writer.end();
+
+ return false;
+ }
+}
+----
+
+ The call to renderInformalParameters() is what converts and outputs
+ the informal parameters. It should occur <after> your code has
+ rendered attributes into the element (earlier written attributes
+ will <not> be overwritten by later written attributes).
+
+ Returning false from beginRender() ensures that the body of the component
+ is not rendered, which makes sense for a \<img\> tag, which has no body.
+
+ Another option is to use the
+
{{{../apidocs/org/apache/tapestry5/corelib/mixins/RenderInformals.html}RenderInformals}}
+ mixin:
+
+----
+public class Img
+{
+ @Parameter(required=true, allowNull=false,
defaultPrefix=BindingConstants.ASSET)
+ private Asset src;
+
+ @Mixin
+ private RenderInformals renderInformals;
+
+ void beginRender(MarkupWriter writer)
+ {
+ writer.element("img",
+ "src", src);
+
+ resources.renderInformalParameters(writer);
+ }
+
+ boolean beforeRenderBody(MarkupWriter writer)
+ {
+ writer.end();
+
+ return false;
+ }
+}
+----
+
+ This variation splits the rendering of the tag in two pieces, so that
+ the RenderInformals mixin can operate (after beginRender() and before
+ beforeRenderBody()).
\ No newline at end of file
Modified: tapestry/tapestry5/trunk/src/site/apt/dev/env.apt
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/dev/env.apt?rev=678187&r1=678186&r2=678187&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/src/site/apt/dev/env.apt (original)
+++ tapestry/tapestry5/trunk/src/site/apt/dev/env.apt Sat Jul 19 10:33:22 2008
@@ -8,7 +8,7 @@
Effectively, you should have the following tools:
- * Maven 2.0.8
+ * Maven 2.0.9
* Ant 1.7.0
@@ -16,7 +16,7 @@
[]
- IntelliJ is available to all Tapestry committers under their generous
open-source policy. This is one of the
+ IntelliJ is available to all Tapestry committers under JetBrains' generous
open-source policy. This is one of the
perks of being invited as a committer.
Builds
Copied: tapestry/tapestry5/trunk/src/site/apt/upgrade.apt (from r673794,
tapestry/tapestry5/trunk/tapestry-core/src/site/apt/upgrade.apt)
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/upgrade.apt?p2=tapestry/tapestry5/trunk/src/site/apt/upgrade.apt&p1=tapestry/tapestry5/trunk/tapestry-core/src/site/apt/upgrade.apt&r1=673794&r2=678187&rev=678187&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/site/apt/upgrade.apt (original)
+++ tapestry/tapestry5/trunk/src/site/apt/upgrade.apt Sat Jul 19 10:33:22 2008
@@ -9,11 +9,17 @@
It is always advised to perform a full and complete build after upgrading.
- You should also check the {{{../release-notes.html}project-wide release
notes}} for information
+ You should also check the {{{release-notes.html}project-wide release notes}}
for information
about bugs fixes and other improvements.
Release 5.0.14
+ Attempting to instantiate a component class will now result in a runtime
exception (this is a common
+ beginner's mistake, pages and components should be injected, not
instantiated).
+
+ Properties files in message catalogs are now already read using the UTF-8
charset. Unlike traditional
+ Java ResourceBundles, it is <not> necessary to use Java's <<<native2ascii>>>
tool.
+
Release 5.0.13
As part of
{{{https://issues.apache.org/jira/browse/TAPESTRY-2311}TAPESTRY-2311}}, there
have been
@@ -22,6 +28,13 @@
Release 5.0.12
+* ClassFabUtils
+
+ Several methods of
{{{../apidocs/org/apache/tapestry5/ioc/services/ClassFabUtils.html}ClassFabUtils}}
+ have been removed. The new method {{{castReference()}}} is an improved
replacement for the removed
+ methods. These methods were largely used when decorating services, and the
new
+
{{{../apidocs/org/apache/tapestry5/ioc/services/AspectDecorator.html}AspectDecorator}}
is even easier.
+
* JavaScript Changes
Tapestry now organizes JavaScript a bit differently; all JavaScript is at
the bottom of the page, just
@@ -30,13 +43,13 @@
This can cause some pages to break, those that included inline \<script\>
blocks in their templates.
You should inject the
- {{{../apidocs/org/apache/tapestry5/RenderSupport.html}RenderSupport}}
environmental and use it
+ {{{apidocs/org/apache/tapestry5/RenderSupport.html}RenderSupport}}
environmental and use it
to include JavaScript properly.
* ReorderProperties annotation
A new annotation,
-
{{{../apidocs/org/apache/tapestry5/beaneditor/ReorderProperties.html}ReorderProperties}}
+
{{{apidocs/org/apache/tapestry5/beaneditor/ReorderProperties.html}ReorderProperties}}
(which is placed on a type) has replaced the OrderAfter and OrderBefore
annotations
(which were placed on accessor methods).
@@ -49,28 +62,28 @@
In addition, a number of classes were refactored.
PageRenderSupport has been renamed to just
- {{{../apidocs/org/apache/tapestry5/RenderSupport.html}RenderSupport}}.
+ {{{apidocs/org/apache/tapestry5/RenderSupport.html}RenderSupport}}.
TapestryConstants has been removed, split into a number of new classes (by
type), such as
- {{{../apidocs/org/apache/tapestry5/SymbolConstants.html}SymbolConstants}}.
+ {{{apidocs/org/apache/tapestry5/SymbolConstants.html}SymbolConstants}}.
Likewise, TapestryUtils has been split into
- {{{../apidocs/org/apache/tapestry5/MarkupUtils.html}MarkupUtils}} and
- {{{../apidocs/org/apache/tapestry5/VersionUtils.html}VersionUtils}}.
+ {{{apidocs/org/apache/tapestry5/MarkupUtils.html}MarkupUtils}} and
+ {{{apidocs/org/apache/tapestry5/VersionUtils.html}VersionUtils}}.
[]
* TapestryModule
Many of the internal services of Tapestry have been split off into their own
module,
-
{{{../apidocs/org/apache/tapestry5/internal/services/InternalModule.html}InternalModule}}.
+
{{{apidocs/org/apache/tapestry5/internal/services/InternalModule.html}InternalModule}}.
This should not affect any user code.
* Form component
- The default
{{{../apidocs/org/apache/tapestry5/ValidationTracker.html}ValidationTracker}}
+ The default
{{{apidocs/org/apache/tapestry5/ValidationTracker.html}ValidationTracker}}
built into the Form component now has a persistence strategy of "flash".
This means that
- if you navigate away from a page with validation errors and return, you will
lose the errors
+ if you navigate away from a page with validation errors and return, you will
lose the errors.
To support this style of navigation, you will need to bind the Form's
tracker parameter
to a field that has the correct persistency (most likely, "session", the
previous persistence
strategy).
@@ -78,7 +91,7 @@
* Resource.openStream()
The methods <<<exists()>>> and <<<openStream()>>> were added to the
- {{{../apidocs/org/apache/tapestry5/ioc/Resource.html}Resource}} interface.
The semantics
+ {{{apidocs/org/apache/tapestry5/ioc/Resource.html}Resource}} interface. The
semantics
of some of the other methods were slightly alterred.
* Loop element parameter
@@ -90,14 +103,14 @@
* Field.getElementName()
- The method <<<getElementName()>>> on interface
{{{../apidocs/org/apache/tapestry5/Field.html}Field}}
+ The method <<<getElementName()>>> on interface
{{{apidocs/org/apache/tapestry5/Field.html}Field}}
was renamed to <<<getControlName()>>>. This brings the property in
alignment with W3C documentation
and terminology, and helps differentiate from the element name (i.e., the
tag name used to represent
the element in a component template).
This affects a number of existing components that implement the interface.
- Method <<<allocateElementName()>>> on interface
{{{../apidocs/org/apache/tapestry5/services/FormSupport.html}FormSupport}}
+ Method <<<allocateElementName()>>> on interface
{{{apidocs/org/apache/tapestry5/services/FormSupport.html}FormSupport}}
was likewise renamed to <<<allocateControlName()>>>.
* Zone
@@ -110,25 +123,25 @@
* Validator.invokeIfBlank()
- The method <<<invokeIfBlank()>>> on interface
{{{../apidocs/org/apache/tapestry5/Validator.html}Validator}}
+ The method <<<invokeIfBlank()>>> on interface
{{{apidocs/org/apache/tapestry5/Validator.html}Validator}}
was renamed to <<<isRequired()>>>.
* MetaDataLocator
- The <<findMeta()>> method on interface
{{{../apidocs/org/apache/tapestry5/services/MetaDataLocator.html}MetaDataLocator}}
+ The <<findMeta()>> method on interface
{{{apidocs/org/apache/tapestry5/services/MetaDataLocator.html}MetaDataLocator}}
has changed significantly; it now expands symbols and performs type coercion.
* Grid Interfaces
- The {{{../apidocs/org/apache/tapestry5/grid/GridModel.html}GridModel}}
interface and
+ The {{{apidocs/org/apache/tapestry5/grid/GridModel.html}GridModel}}
interface and
the <<<prepare()>>> method of
- {{{../apidocs/org/apache/tapestry5/grid/GridDataSource.html}GridDataSource}}
have changed to accommodate
+ {{{apidocs/org/apache/tapestry5/grid/GridDataSource.html}GridDataSource}}
have changed to accommodate
the ability to sort using multiple columns.
* PropertyModel
The <<<getWidth()>>> method was removed from the
-
{{{../apidocs/org/apache/tapestry5/beaneditor/PropertyModel.java}PropertyModel}}
interface; the logic
+
{{{apidocs/org/apache/tapestry5/beaneditor/PropertyModel.java}PropertyModel}}
interface; the logic
for deducing the desired field size from the @Width annotation has been
moved into AbstractTextField.
* Grid, BeanEditForm, BeanEditor, BeanDisplay
@@ -136,12 +149,12 @@
The data type for boolean values has changed from "checkbox" (reflecting how
it is rendered in an edit form) to "boolean"
(reflecting what it is). In addition, all numeric types are given the data
type "number".
This will only affect your application if you provided an overriding
contribution
- to the
{{{../apidocs/org/apache/tapestry5/services/BeanBlockSource.html}BeanBlockSource}}
service.
+ to the
{{{apidocs/org/apache/tapestry5/services/BeanBlockSource.html}BeanBlockSource}}
service.
* ExceptionInfo
The return type for <<<getStackTrace()>>> on
-
{{{../apidocs/org/apache/tapestry5/services/ExceptionInfo.html}ExceptionInfo}}
+ {{{apidocs/org/apache/tapestry5/services/ExceptionInfo.html}ExceptionInfo}}
changed from List\<String\> to List\<StackTraceElement\>.
* ApplicationGlobals and RequestGlobals
@@ -151,7 +164,7 @@
* BeanModel
- The <<<remove()>>> method of
{{{../apidocs/org/apache/tapestry5/beaneditor/BeanModel.html}BeanModel}} was
renamed
+ The <<<remove()>>> method of
{{{apidocs/org/apache/tapestry5/beaneditor/BeanModel.html}BeanModel}} was
renamed
to <<<exclude()>>>, and a new method, <<<include()>>> was added. The
<<remove>> parameter of BeanEditForm,
BeanEditor, BeanDisplay and Grid were all renamed to <<exclude>> as well
(and a new <<include>> parameter was added
to each).
\ No newline at end of file
Modified: tapestry/tapestry5/trunk/src/site/fml/faq/general.fml
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/fml/faq/general.fml?rev=678187&r1=678186&r2=678187&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/src/site/fml/faq/general.fml (original)
+++ tapestry/tapestry5/trunk/src/site/fml/faq/general.fml Sat Jul 19 10:33:22
2008
@@ -19,7 +19,7 @@
</faq>
- <faq id="classcastexception">
+ <faq id="classcastexception">
<question>Why do I get a ClassCastException when I pass a page or
component to a service?</question>
<answer>
<p>
@@ -53,13 +53,13 @@
</faq>
<faq id="why-not-spring-guice">
- <question>Why Tapestry IoC? Why not use Spring or
Guice?</question>
+ <question>Why Tapestry IoC? Why not use Spring or Guice?</question>
<answer>
<p>
This comes up too frequently. Spring and Guice are very
good containers, but are
- targetted at defining services for <em>applications</em>,
not <em>frameworks</em>.
- Tapestry has certain specific needs that are pervasive in the IoC layer,
chief among them
- extensibility. It must be possible to override internal
services on a spot basis.
+ targetted at defining services for<em>applications</em>,
not<em>frameworks</em>.
+ Tapestry has certain specific needs that are pervasive in
the IoC layer, chief among them
+ extensibility. It must be possible to override internal
services on a spot basis.
It must be possible to extend the configuration of an
existing service.
</p>
@@ -68,13 +68,16 @@
or by explicit name. To support Tapestry's level of
extensibility, each new Tapestry
project would require a copy of a large Spring
configuration file that would need to
be customized. Adding an additional layer, such as
tapestry-hibernate, would
- add additional configuration into the configuration file.
This simply isn't the Tapestry way,
- where things <em>Just Work</em> (and where we avoid XML).
+ add additional configuration into the configuration file.
This simply isn't the Tapestry way,
+ where things
+ <em>Just Work</em>
+ (and where we avoid XML).
</p>
<p>
Guice is very similar; there's no XML, but there are
marker annotations used to select a specific
- implementaton from a pool of objects with the same
interface. This means that Java code would have to be
+ implementaton from a pool of objects with the same
interface. This means that Java code would have
+ to be
replaced in some cases, to slip overrides into place.
</p>
@@ -89,13 +92,13 @@
<faq id="page-lifecycle-and-new">
<question>
- Why do I have to inject a page? Why can't I just create one
using <code>new</code>?
+ Why do I have to inject a page? Why can't I just create one
using new?
</question>
<answer>
<p>
- As explained elsewhere, Tapestry tranforms your class at
runtime. It tends to build
- a large constructor for the class instance. Further, an
instance of the
+ As explained elsewhere, Tapestry tranforms your class at
runtime. It tends to build
+ a large constructor for the class instance. Further, an
instance of the
class is useless by itself, it must be wired together with
its template
and its sub-components.
</p>
@@ -103,9 +106,10 @@
</faq>
+
<faq id="why-pool-pages">
<question>
- Why is it necessary to pool pages? Couldn't they just be
created fresh? Or stored in the HttpSession?
+ Why is it necessary to pool pages? Couldn't they just be
created fresh? Or stored in the HttpSession?
</question>
<answer>
@@ -117,7 +121,7 @@
<p>
Many of those objects are not serializable, and therefore,
should not go into
- the HttpSession. In addition, many of the objects are
shared between page instances, but
+ the HttpSession. In addition, many of the objects are
shared between page instances, but
serialization is like a deep copy and would create
duplicates of such objects.
</p>
@@ -132,107 +136,146 @@
<p>
It takes an appreciable amount of time to construct a
working page instance, as all
those objects need to be instantiated, looked up,
organized and wired together. It's barely
- noticable to a single developer, but a real site with real
traffic, would find it unnacceptible
+ noticable to a single developer, but a real site with real
traffic would find it unnacceptible
to create a new page instance for each request.
</p>
<p>
Further, Tapestry's structure allows for a lot of
optimizations and caching. This means that the
- <em>second</em> use of a page tends to be more efficient
than the first, as most
+ <em>second</em>
+ use of a page tends to be more efficient than the first,
as most
cacheable values have been cached.
</p>
</answer>
</faq>
- <faq id="event-method-duplication">
+ <faq id="annotations-vs-naming-conventions">
<question>
- Why are my methods getting invoked multiple times?
+ Which is better, explict annotatations such as
+ OnEvent or
+ BeginRender
+ or using the naming conventions, such as
+ onAction()
+ or beginRender()?
</question>
-
<answer>
<p>
- There are some odd edge cases involving inheritance and
- render phase methods. Here's an example:
+ Both options have their place. In my experience, the
naming convention option is very good
+ for fast development, especially for prototyping. This is
an area of great subjectivity, some
+ developers
+ will find the annotations more readable and maintainable,
others will find the same for the
+ naming convention approach.
+ </p>
+
+ <p>
+ Historically, the annotations came first, and the naming
conventions were "overlayed" on top of
+ them.
</p>
-<source><![CDATA[
+ <p>
+ One advantage of using annotations, is that the method
name can now be descriptive of what
+ the method does (i.e.,
+ <code>validateUserCredentials()</code>
+ instead of
+ <code>onValidateFormFromLogin()</code>).
+ </p>
-public class BasePage
-{
- void beginRender()
- {
- System.out.println("BasePage -- beginRender()");
- }
-}
+ <p>
+ Annotations have a further advantage in that the
attributes of the annotation can be
+ constants, rather than literals:
+ </p>
-public class ChildPage
-{
- void beginRender()
- {
- System.out.println("ChildPage -- beginRender()");
- }
-}
+ <pre>
+ private static final String LOGIN = "login";
-]]> (sorry about the CDATA, it's a typical Maven bug, please ignore)</source>
+ @OnEvent(value=Form.VALIDATE_FORM, component=LOGIN)
+ void validateUserCredentials()
+ {
+ ...
+ }
+ </pre>
<p>
- Because there is a beginRender() method in the BasePage
class, it will be invoked as part
- of the BeginRender phase. However, it is overridden by an
identical ChildPage method.
- So the ChildPage method gets invoked once.
+ This helps the compiler check your code for typos, and
mnimizes the difficult of change when
+ refactoring the names of components.
</p>
+ </answer>
+ </faq>
+
+ <faq id="component-vs-injectcomponent">
+
+ <question>
+ Should I use @Component or @InjectComponent?
+ </question>
+
+ <answer>
<p>
- However, ChildPage also provides a beginRender() (an
override of the parent class), so
- this method also gets invoked ... for a second time.
+ They both have their uses. The basic reasoning is derived
from<em>where the component type is
+ defined</em>.
</p>
<p>
- You can't turn off base class method invocations; what you
can and should do is
- make your event handler methods in a base class
<code>final</code>.
+ Every component must have a specific type, a Java class
that the framework can instantiate. This can
+ come from a number of places:
</p>
-
+ <ul>
+ <li>
+ When the component is defined in the template using a
+ <em>t:type</em>
+ element name, the type is
+ defined by the element name.
+ </li>
+ <li>
+ When the component is a normal element, but has the
t:type attribute, the type is defined
+ by the attribute value.
+ </li>
+ <li>
+ When the component is a normal element and has the
t:id attribute, there
+ <em>must</em>
+ be
+ a corresponding @Component annotation to define the
type.
+ </li>
+ </ul>
+
+ <p>
+ The @InjectComponent annotation does not define the type
of the component. The component type
+ must be defined else where. The field that is annotated
does not have to precisely match
+ the component's actual type: it can be a super-class
instead, or an interface implemented by the
+ component.
+ </p>
</answer>
+
</faq>
- </part>
+ <faq>
+ <question>
+ Why are there both Request and HttpServletRequest?
+ </question>
+ <answer>
+ <p>Tapestry's Request interface is
+ <em>very</em>
+ close
+ to the standard HttpServletRequest interface. It differs
in just a few ways, omitting
+ a number of unneeded methods, adding a couple
+ of methods (such as isXHR()) and changing how a few of the
existing methods
+ operate. for example, getParameterNames() returns a sorted
List of Strings;
+ HttpServletRequest returns an Enumeration, which is a very
dated approach.
+ </p>
- <!--
-<part id="General">
- <faq id="dead-doo-dad">
- <question>My doo-dad is dead. How can I regenerate it?</question>
- <answer>
- <p>
- Doo-dad generation happens at system boot. Therefore, the simplest
- answer is to restart the hello-world-doodad service.
- </p>
- <p>
- If your doodad service is widget-enabled, you can also regenerate
- dead doo-dads using the /widgets/reincarnate.doodad address and the
- following message data:
- </p>
- <source>
- <reincarnation>
- <id>1</id>
- <password>ThisShouldBeEncrypted</password>
- </reincarnation>
- </source>
- </answer>
- </faq>
- <faq id="what-is-a-doo-dad">
- <question>What the [EMAIL PROTECTED] is a doo-dad anyway?</question>
- <answer>
- <p>
- Doo-dads are components of the hello-world system used to obfuscate
- the misdirection server. It is critical to system health that the
- doo-dad pool have an appropriate threshold and that it be culled
- regularly.
- </p>
- </answer>
- </faq>
-</part> -->
+ <p>
+ However, the stronger reason for Request (and Response and
Session, etc.)
+ is for support of Portlets in the future. By writing your
code in terms of
+ Request, and not HttpServletRequest, you can be assured
that the same
+ code will operate in both Servlet Tapestry and Portlet
Tapestry.
+ </p>
+ </answer>
+ </faq>
+
+ </part>
</faqs>
\ No newline at end of file
Modified: tapestry/tapestry5/trunk/src/site/site.xml
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/site.xml?rev=678187&r1=678186&r2=678187&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/src/site/site.xml (original)
+++ tapestry/tapestry5/trunk/src/site/site.xml Sat Jul 19 10:33:22 2008
@@ -46,6 +46,11 @@
<item name="FAQ" href="faq/general.html"/>
</menu>
+ <menu name="Upgrade Notes">
+ <item name="From Tapestry 5" href="upgrade.html"/>
+ <item name="From Tapestry 4" href="upgrade4.html"/>
+ </menu>
+
<menu name="Tapestry 5 Modules">
<item name="tapestry-annotations" href="tapestry-annotations/"/>
<item name="tapestry-core" href="tapestry-core/"/>
@@ -60,6 +65,12 @@
<item name="Tutorial #1" href="tutorial1/"/>
</menu>
+ <menu name="Tapestry Cookbook">
+ <item name="Introduction" href="cookbook/"/>
+ <item name="Supporting Informal Parameters"
href="cookbook/informals.html"/>
+ <item name="Default Parameter"
href="cookbook/defaultparameter.html"/>
+ </menu>
+
<menu name="Tapestry 5 Maven Support">
<item name="quickstart" href="quickstart/"/>
<item name="tapestry-component-report"
href="tapestry-component-report/"/>
Modified: tapestry/tapestry5/trunk/tapestry-core/src/site/site.xml
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/site/site.xml?rev=678187&r1=678186&r2=678187&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/site/site.xml (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/site/site.xml Sat Jul 19
10:33:22 2008
@@ -52,11 +52,6 @@
<item name="Download"
href="http://tapestry.apache.org/download.html"/>
</menu>
- <menu name="Upgrade Notes">
- <item name="From Tapestry 5" href="upgrade.html"/>
- <item name="From Tapestry 4" href="upgrade4.html"/>
- </menu>
-
<menu name="User Guide">
<item name="Project Layout" href="guide/project-layout.html"/>
<item name="Component Classes"
href="guide/component-classes.html"/>
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/site/site.xml
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/site/site.xml?rev=678187&r1=678186&r2=678187&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/site/site.xml (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/site/site.xml Sat Jul 19 10:33:22
2008
@@ -43,7 +43,6 @@
<menu name="Quick Links">
<item name="Download"
href="http://tapestry.apache.org/download.html"/>
- <item name="Upgrade Notes" href="upgrade.html"/>
</menu>
<menu name="Tapestry IoC Container">