I would like to get your thoughts about the necessity for the form
component to output its own Zone when one already exists ...
I work on a component wish should be able to show the user a piece of
data (an article) but with different views according to the use case :
- The user can read an extract of the article,
- The user can read the whole article,
- The user can edit/create the article.
The idea is to permit the user to switch from one view to the other
without rerendering the whole page (which show a list of articles) using
Tapestry Ajax possibilities.
So i started by putting all the output of the article in a global zone
called ArticleZone with Links (where the zone parameter is set to the
ArticleZone) to switch between the views.
<t:zone t:id="ArticleZone">
<t:delegate to="view"/>
</t:zone>
<t:block id="ResumeView">
<t:eventlink t:event="detail" t:zone="ArticleZone">Detail</t:eventlink>
...
</t:block>
<t:block id="DetailView">
<t:eventlink t:event="resume" t:zone="ArticleZone">Resume</t:eventlink>
...
</t:block>
All that stuff works fine.
The problem raises up with the edit view. In this view, the data is
shown in a Form and i just set the zone parameter of the form to the
ArticleZone (as i did with the links).
<t:block id="EditView">
<t:form t:id="articleForm" t:zone="ArticleZone">
...
</t:form>
</t:block>
I thought that the ArticleZone would be rerendered when the submit is
triggered and for the end user, it looks like it is done. But if one
look at the HTML code rendered to the client, he can see that Tapestry
rendered 2 Zones ! The ArticleZone and a second ArticleZone (renamed by
the framework to avoid the duplication of the name) for the Form to use ...
<div id="ArticleZone" class="t-zone">
<div id="ArticleZone:11c50af13af" class="t-zone">
<form id="articleForm:11c50af13af"
name="articleForm:11c50af13af" method="post" action="/backoffice/testad.adbloc.articleform">
...
</form>
</div>
</div>
So why doesn't Tapestry use the existing Zone when this one already
exists like Links do ... (and creates the Zone defined in the zone
parameter of the Form only if this one doesn't exist) ?
Stephane