cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sam Coward <>
Subject Question regarding JXTemplate and JXForms
Date Wed, 17 Sep 2003 08:39:39 GMT
Hi Cocooners,
    I think I may have found and fixed a problem, but I need some 
confirmation that I haven't actually broken anything ;)

    I was recently playing with the idea of having the form definition 
for a JXForm display templateable using JXTemplate. Thus I constructed 
my pipeline so:

<map:pipeline internal-only="true">
       <!-- Template the form definition -->
      <map:match pattern="jxt-*-*">
        <map:generate src="system/{1}/{2}/jxform.xml" type="jx"/>
        <map:serialize type="xml"/>

      <!-- Generate the JXForm view of the JXTemplated JXForm, this is 
invoked from the flowscript-->
      <map:match pattern="jxfv-*-*">
        <map:generate src="cocoon:/ejxt-{1}-{2}" type="jxforms"/>
        <map:transform src="system/ejbforms/jxforms-default.xsl"/>
        <map:transform src="system/ejbforms/jxform2html.xsl"/>
        <map:serialize type="xhtml"/>

But I found that for some reason the output was no longer working, even 
if the form definition had no JXTemplate evaluations. I thought this was 
weird, so I accessed the jxt-*-* pipeline directly (which generates with 
JXTemplateGenerator) and compared that output after I changed it to the 
generate with  FileGenerator. Interestingly, the file output was 
identical, yet the jxfv-*-* pipeline began to work when I used 
FileGenerator. Being curious I put LogTransformer after the generator 
and notice that JXTemplateGenerator seems to trigger the 
setDocumentLocator event before every single event!

As I Looked a little deeper into the code for JXTemplateGenerator I 
found at the start of execute() that setDocumentLocator was being called 
for every iteration of the event loop:

    private void execute(final XMLConsumer consumer,
                         MyJexlContext jexlContext,
                         JXPathContext jxpathContext,
                         Event startEvent, Event endEvent)
        throws SAXException {
        Event ev = startEvent;
        while (ev != endEvent) {
            if (ev instanceof Characters) {
                /* ... snip ... */
            ev =;

So I moved the consumer.setDocumentLocator() line outside the event 
loop, and now it all works. Is this correct? From what I understand from 
the documentation, the generator can include other template files and I 
was not sure if setDocumentLocator() would still need to be called to 
indicate the location of the included file??

Many thanks in advance for any advice,

View raw message