You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by Christopher Oliver <re...@verizon.net> on 2003/03/27 22:35:19 UTC

JXPathTransformer, JexlTransformer, FlowVelocityGenerator added to scratchpad

I've moved FlowVelocityGenerator from the velocity block, and added 
JXPathTransformer and JexlTransformer to the scratchpad. Each of these 
processes page templates that provide an interface to the Cocoon flow 
layer. See below for details. I've also added samples of calling each 
from a Flowscript to the PetStore sample in the scratchpad:

http://cvs.apache.org/viewcvs.cgi/cocoon-2.1/src/scratchpad/webapp/samples/petstore/view/

Let me know what you think.

Regards,

Chris



(1) org.apache.cocoon.transformation.JXPathTransformer

Provides the same tag library as the JPath Xsp logic sheet:

   <if>
   <choose>
   <value-of>
   <for-each>

It also supports XPath as an embedded expression language. The embedded 
expression language makes it possible to easily access application data 
and manipulate it in simple ways without having to use Xsp. With the 
JPath logic sheet, a page author had to use <xsp:attribute> to embed 
application data in an attribute value:

  <site>
     <xsp:attribute name="signOn">
        <jpath:value-of select="accountForm/signOn"/>
     </xsp:attribute>

The embedded expression language allows a page author to access an 
object using a simplified syntax such as

  <site signOn="{accountForm/signOn}">

Embedded XPath expressions are contained in curly braces.

Note that since, like the JPath logic sheet, JXPathTransformer uses 
Apache JXPath http://jakarta.apache.org/commons/jxpath/, the referenced 
objects may be Java Beans, JavaScript objects from the flow layer, or 
DOM or JDOM objects. The current Web Continuation from the flow script 
is also available as an XPath variable named "continuation". You would 
typically access its id:

      <form action="{$continuation/id} >

You can also reach previous continuations by using the getContinuation() 
  function:

      <form action="{getContinuation($continuation, 1)}" >

The <if> tag allows the conditional execution of its body according to 
value of a "test" attribute.

   <if test="XPathExpression">
       body
   </if>

The <choose> tag performs conditional block execution by the embedded 
<when> sub tags. It renders the body of the first <when> tag whose 
"test" condition evaluates to true. If none of the "test" conditions of 
nested <whe>n tags evaluate to true, then the body of an <otherwise> tag 
is evaluated, if present.

   <choose>
     <when test="XPathExpression">
        body
     </when>
     <otherwise>
        body
     </otherwise>
   </choose

The <value-of> tag evaluates an xpath expression and outputs the result 
of the evaluation.

   <value-of select="XPathExpression"/>

The <for-each> tag allows you to iterate over a collection of objects.

   <for-each select="XPathExpression">
      body
   </for-each>


(2) org.apache.cocoon.transformation.JexlTransformer

Provides a similar tag library

   <if>
   <choose>
   <out>
   <forEach>

but provides the JSTL expression language based on Apache Commons Jexl 
http://jakarta.apache.org/commons/jexl instead of XPath, e.g:

   <site signOn="${accountForm.signOn}">

You can access the id of the current Web Continuation like this:

   <form action="${continuation.id}"

or a previous one like this:

   <form action="${continuation.getContinuation(1).id}">

The <if> tag allows the conditional execution of its body according to 
value of a "test" attribute.

   <if test="${JexlExpression}">
       body
   </if>

The <choose> tag performs conditional block execution by the embedded 
<when> sub tags. It renders the body of the first <when> tag whose 
"test" condition evaluates to true. If none of the "test" conditions of 
nested <whe>n tags evaluate to true, then the body of an <otherwise> tag 
is evaluated, if present.

   <choose>
     <when test="${JexlExpression}">
        body
     </when>
     <otherwise>
        body
     </otherwise>
   </choose

The <out> tag evaluates a Jexl expression and outputs the result of the 
evaluation.

   <out value="${JexlExpression}" default="value"/>

The <forEach> tag allows you to iterate over a collection of objects. 
You specify the collection via the "items" attribute, and the current 
item is available through a variable named by the "var" attribute.

   <forEach var="name" items="${JexlExpression}">
      body
   </forEach>