At 2:39 PM +0200 20/7/01, Torsten Curdt wrote:
>
>Thanks, took a while to find a way - but I'm still not satisfied as you
>might see ;) too much java programming required for the forms
a good reason to reuse existing TagLibs in this realm ;)
>
>> The problem I see is that people have developed different languages for
>> different storage mediums, hence we have esql -> SQL DB, fp -> XML File,
>> crudlet -> JavaBeans/JavaSpace, and many others.
>>
>> How do we provide a way to make a generic form handling and verification
>> system that can easily deal with different storage?
I still think this is an important issue, that any generic form-handling
mechanism
for Cocoon2 should be savvy with, not everybody uses databases!!!
>> I am convinced XSP Actions would help.
>
>I was always voting for makeing the XSPEngine a component that can be
>used not just for the generation of cocoon serverpages. I would have
>used this engine to create some classes for my application via XSP
>as well!! And of course it could be used easily to create XSP based
>Actions! Just a different stylesheet and a different class name
>convention - maybe a different output dir.
>
>Undreamed-of possibilities!
I cannot judge at the moment how much work it would be to implement this, I
do not know the codebase well enough.
>> BTW. The other big problem I am wrestling with is the thorny issue of
>> content-logic; where the content that is displayed is intricately tied to
>> the condition of runtime and static parameters, often in our case up to
>> four or five levels of nested if-then-else 'statements'. We find this
>> content-logic to be in a different realm to the underlying business-logic
>> of the Beans, it needs to be accessible to the Content Authors as they are
>> the ones who understand the logic and the content at the display level.
>> This does not map nicely into the Cocoon "cleanroom" model.
>
>I can have a slight idea but could you give an example what type of
>cascading logic this would be?
I will give you an idea of this by showing what our StyleSheets looked
like, then what we are replacing them with (sorry, but this is VERY
verbose, and will be horribly wrapped!):
This is a snippet from our old approach, where we had to have one
stylesheet per page (to contain content-selection logic)
<tr>
<td>
<xsl:choose>
<xsl:when test="$isMyOffer = 'true'"> <!-- if it is my offer
-->
<xsl:choose>
<xsl:when test="$isActive = 'true'">
<p>See below for the full details of
the offer you have made.
You are able to retract
or complete this offer, if the
circumstances of this offer
have changed or if you
are satisfied that your line
has been sufficiently covered.</p>
<p>To view the exchanges on this offer
go to <a
href="../../you/olw/yourOffers.xml">You</a>.</p>
<p>All negotiations that have been
bound will be upheld.
Please see our <a
href="../user/faqsMembers.xml">FAQ</a> section
if you have queries regarding
outstanding exchanges on your
offer that may be
affected by retracting or
completing this offer.</p>
</xsl:when>
<xsl:otherwise>
<p>Your offer has been
retracted/completed or has expired. To
view the exchanges on your
offer go to <a
href="../../you/olw/yourOffers.xml">You</a>.</p>
<p>All negotiations that have been
bound will be upheld.</p>
</xsl:otherwise>
</xsl:choose>
<b>You made this offer on <xsl:apply-templates
select="crud-output/bean/property[ @name = 'CreationDate' ]"/></b>
</xsl:when>
<xsl:otherwise> <!-- if it is NOT my offer -->
<xsl:choose>
<xsl:when test="$isCloaked = 'true'">
<xsl:choose>
<xsl:when test="$isActive =
'true'">
<p>The Reinsured for
this offer is cloaked, therefore you
are able to pre-accept
or counter
this offer. Please click on the appropriate
button presented at the
bottom of this
page; this will take you through to the
next step of the process. </p>
<p>If you would like
to decline this offer, then you need
not take any action and simply
<a
href="offersList.xml">click here</a> to return to the
<a
href="offersList.xml">Main Offers Board</a>.
</p>
</xsl:when>
<xsl:otherwise>
<p>This cloaked offer
has been retracted/completed or has
expired. To view the exchanges
on this offer
go to <a
href="../you/olw/yourOffers.xml">You</a>.</p>
<p>All negotiations
that have been bound will be upheld.</p>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="$isActive =
'true'">
<p>In order to accept
or counter this offer, please click
on the appropriate button
presented at
the bottom of this page, which will take you
through to the next step of the process.</p>
<p>If you would like
to decline this offer, then you need
not take any action and simply
<a
href="../../offer/olw/offersList.xml">click here</a>
to return to the
<a
href="offersList.xml">Main Offers Board</a>. </p>
</xsl:when>
<xsl:otherwise>
<p>This offer has been
retracted/completed or has expired.
To view the exchanges
on this offer
go to <a
href="../../you/olw/yourOffers.xml">You</a>.</p>
<p>All negotiations
that have been bound will be upheld.</p>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
<b>This offer was made on <xsl:apply-templates
select="crud-output/bean/property[ @name = 'CreationDate' ]"/></b>
</xsl:otherwise>
</xsl:choose>
</td>
</tr>
This is the equivalent sample from our new approach.
We embed both content-logic and content in one XSP Page.
We use a stylesheet pass (select.xsl) that selects the bits of content we
actually want to see depending on run-time parameters.
The select namespace works thus:
Uses the select:choose and select:match attributes
At any level, the select:choose attribute in an element, filters it's
child elements according to the value of their selech:match attribute.
The TagLib handles looking up values for {varName} from the crudlet:var
variables (not included)
declarations (so the author does not have to write all of those
xsp:attribute tags)
If the child of an element acting as a chooser, has a value in it's
matcher that equals, it is output
If a child has no matcher, it is always output
If there are no matches, child elements with a select:match="*" are output
Any element may be both a matcher and a chooser
We use <span> as a "throwaway"
<instructions select:choose="{Sender}">
<span select:match="{UserName}" select:choose="{IsActive}">
<p select:match="true">See below for the full details of the offer you
have made.
You are able to retract or complete this offer, if the
circumstances
of this
offer have changed or if you are satisfied that your line has
been
sufficiently covered.</p>
<p select:match="true">To view the exchanges on this offer go to
<a href="../../you/olw/yourOffers.xml">You</a>.</p>
<p select:match="true">All negotiations that have been bound will be
upheld.
Please see our <a href="../user/faqsMembers.xml">FAQ</a>
section if
you have
queries regarding outstanding exchanges on your offer that may
be
affected by
retracting or completing this offer.</p>
<p select:match="false">Your offer has been retracted/completed or has
expired.
To view the exchanges on your offer go to <a
href="../../you/olw/yourOffers.xml">You</a>.</p>
<p select:match="false">All negotiations that have been bound will be
upheld.</p>
<p>You made this offer on <crudlet:copy-of bean="OfferDisplay"
property="CreationDate"/></p>
</span>
<span select:match="*" select:choose="(IsCloaked}">
<span select:match="true" select:choose="{IsActive}">
<p select:match="true">The Reinsured for this offer is cloaked,
therefore you are
able to pre-accept or counter this offer. Please
click on the
appropriate button
presented at the bottom of this page; this will take
you through to
the next step
of the process. </p>
<p select:match="true">If you would like to decline this
offer, then
you need not
take any action and simply <a
href="offersList.xml">click here</a>
to return to
the <a href="offersList.xml">Main Offers Board</a>.</p>
<p select:match="false">This cloaked offer has been
retracted/completed or has
expired. To view the exchanges on this offer go to <a
href="../you/olw/yourOffers.xml">You</a>.</p>
<p select:match="false">All negotiations that have been bound
will be
upheld.</p>
</span>
<span select:match="false" select:choose="{IsActive}">
<p select:match="true">In order to accept or counter this
offer,
please click on
the appropriate button presented at the bottom of this
page, which
will take you
through to the next step of the process.</p>
<p select:match="true">If you would like to decline this
offer, then
you need
not take any action and simply <a
href="../../offer/olw/offersList.xml">click here</a>
to return to the <a href="offersList.xml">Main Offers
Board</a>. </p>
<p select:match="false">This offer has been
retracted/completed or
has expired.
To view the exchanges on this offer go to <a
href="../../you/olw/yourOffers.xml">You</a>.</p>
<p select:match="false">All negotiations that have been bound
will be
upheld.</p>
<p>This offer was made on <crudlet:copy-of bean="OfferDisplay"
property="CreationDate"/></p>
</span>
</span>
--
___________________________________________________________________
Jeremy Quinn Karma Divers
webSpace Design
HyperMedia Research Centre
<mailto:[EMAIL PROTECTED]> <http://www.media.demon.co.uk>
<phone:+44.[0].20.7737.6831> <pager:[EMAIL PROTECTED]>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]