I'm currently at a stage where I'm trying to figure out
how to create code blocks that I can call from different places.

There are a few ways to do this using the define tag.

If you just want to execute the same block accessing defined variables you can use define:script:

<define:script var="scripNamet">
  <!-- jelly script here -->
</define:script>
<!-- more jelly here -->

And you can call it with define:invoke:

<define:invoke script="${scriptName}"/>

NOTE: this script needs to be defined before any code that uses it as Jelly uses a SAX parser.


If you need to parse parameters to the script it is probably better to use define:tag and define:taglib. This is slitty more complicated:

<define:taglib uri="nameSpaceForTag">
  <define:tag name="tagName">
    <!-- jelly script here -->
  </define:tag>
</define:taglib>

You will need to add the name space of this taglib to your j:jelly tag:

<j:jelly xmlns:j="jelly:core" xmlns:define="jelly:define" xmlns:foo="nameSpaceForTag">
 <!-- your script -->
</j:jelly>

Now when you want to use the this new tag:

<j:jelly xmlns:j="jelly:core" xmlns:define="jelly:define" xmlns:foo="nameSpaceForTag">
 <foo:tagName/>
</j:jelly>

This will then execute the newly defined nameTag. This at the moment is the same as define:invoke, but if the foo:tagName tag has attributes:

<j:jelly xmlns:j="jelly:core" xmlns:define="jelly:define" xmlns:foo="nameSpaceForTag">
 <foo:tagName attrOne="someData" attrTwo="${someDynamicData}"/>
</j:jelly>

Then inside the definition for tagName (in the taglib) the variables attrOne and attrTwo are avalible:

<define:taglib uri="nameSpaceForTag">
  <define:tag name="tagName">
     <j:out value="attrOne: ${attrOne} attrTwo: ${attrTwo}"/>
  </define:tag>
</define:taglib>

If this code is to be used across multiple file it is probably best that you place this lib in a separate file and use j:import in the script that needs it.

Neal






______________________________________________________________________
LEGAL NOTICE:This e-mail has been sent to you by DataActive
Communications Ltd. This communication, and the information it
contains, is intended for the person(s) or organisation(s) to whom it
is addressed.  Its contents are confidential and may be protected in
law. Unauthorised use, copying or disclosure of any of it may be
unlawful.  If you are not the intended recipient, please notify the
sender by replying with 'Received in error' as the subject and then
delete it from your mailbox. Any views or opinions presented are
solely those of the author and do not necessarily represent those of
DataActive Communications Ltd.  Although this e-mail and any
attachments are believed to be free of any virus or other defects
which might affect any computer or IT system into which they are
received, no responsibility is accepted from DataActive Communications
Ltd, or any of its associated companies for any loss or damage
arising in any way from the receipt or use thereof. We recommend that
you should carry out your own virus checking procedure before opening
any attachment.
______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email ______________________________________________________________________

Reply via email to