Hi,
Since values can be stored on the client (in URLs or hidden fields) T4
allows some rather nifty things to be implemented. I had been planning
to create a library of components that provide some of the features for
many months now, but unfortunately I simple lack the time to concentrate
on the development.
Some of the topics discussed in this forum are related to what I would
like to do, so I will describe my suggestions here in the hope that they
may be useful.
* Local links
Currently it is not natural to create complex components that consist of
several screens. For example, one should be able to easily create a
component that provides CRUD functionality for editing the contents of
the list:
<span jwcid="@Manage" source="ognl: objects"
createType="org.mb.manage.Example"/>
The idea is that the Manage component should have several screens:
- list elements
- create new element
- edit element
- confirm delete
Trails provides a similar ability (plus storing the data into a
database), but its implementation (not its use) has to jump through
hoops to achieve it -- it is certainly possible, but not straight-forward.
One simple reason that links in Tapestry operate on the level of the
page, but there are no standard link components that operate on the
level of a section of the page. If it is possible to use this ability
(which I termed in my work "Cell"), one could implement Manage like this:
<span jwcid="@Cell">
<span jwcid="[EMAIL PROTECTED]:Table" source="ognl:source"
columns="name:toString(), !edit">
...
<span jwcid="[EMAIL PROTECTED]">
<span jwcid="@CellLink" go="editValue"
link:valueParam="ognl:
components.table.tableValue">Edit</span>
</span>
</span>
</span>
There are several things to note in this example:
- CellLink is similar to a DirectLink, but it only operates on the Cell
in which it is placed (or on another Cell which can be passed as a
parameter). Everything else outside the Cell remains the same -- there
are no page changes.
- If CellLink has a listener (like a DirectLink), then the listener will
be invoked and it can change the component displayed in the selected
Cell. In this case, however, the 'go' parameter is used instead which is
analogous to the listener returning a given value. Basically the 'go'
parameter in here says to go to the 'editValue' component (or Block).
- The "link:valueParam" essentially says that the current table value
must be passed to the valueParam parameter of the component. In this
case this allows the editValue component to be rendered correctly with
the provided table value. The combination of "go" and "link:<param>"
allow the user to perform functions that would otherwise require code to
complete. (Note that "link:<param>" requires the value to be stored
using client-side property)
There are a number of other items that I want to mention in relation to
Cell, such as the CellCall and the CellReturn components, page flow (and
no, the current solutions are fundamentally limited I believe), page
parameters, etc, but I will write about them later.
A part of this functionality is strongly related to Ajax and is already
implemented in Tacos. This approach must be able to operate correctly
w/o JavaScript as well, however. So Ajax is not the core, but simply a
way to help the operation.
Since I do not have the ability to work on the ideas at the moment,
please feel free to implement the above if the ideas seem reasonable and
useful to you...
Best regards,
- mb
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]