Hi Gurus,

I have a piece of code with the following for-each loop:

<xsl:for-each select="document('actions.xml')/actions/action">
        <xsl:variable name="target-class">
                <xsl:value-of select="@class"/>
        </xsl:variable>
        <util:include-expr>
                <util:expr>
                        <xsp:expr>
                                <xsl:value-of select="$target-class"/>.getAll()
                        </xsp:expr>
                </util:expr>
        </util:include-expr>
</xsl:for-each>

The intention is to determine the class name at run time and get all
persistent objects of that class from the database.

The reality is that the <util:include-expr></util:include-expr> part is
using only the very first $target-class value, even though the $target-class
value is different for different action elements. Of course, if I just print
out the value of the variable target-class right before entering the
<util:include-expr></util:include-expr>, it prints out all the different
values, as it should.

When I look into the generated class, here's what I find (assuming target
class is Singer, and excluding fully qualified class names):

1.  {
2.      Parser newParser = null;
3.      try {
4.              newParser = (Parser) this.manager.lookup(Parser.ROLE);
5.              InputSource __is = new InputSource(new
StringReader(String.valueOf(Singer.getAll())));
6.              XSPUtil.include(__is, this.contentHandler, newParser);
7.      } catch (Exception e) {
8.              getLogger().error("Could not include page", e);
9.      } finally {
10.             if (newParser != null) {
11.                     this.manager.release((Component) newParser);
12.             }
13.     }
14. }

This code block is repeated for each value of $target-class, with the method
call Singer.getAll replaced with the correct value of $target-class - i.e.,
if $target-class = {Singer, Actor, Producer), the block above is repeated
thrice, with Singer.getAll(), Actor.getAll(), and Producer.getAll() as the
method calls in line 5.

That part is as it should be; but when I see the output, I actually see only
the results of Singer.getAll() appearing thrice! Is the finally clause
releasing the newParser in line 11 responsible for this?

How can I get this to work right? Am I missing something in the way I am
including the expression?

Thanks, and Best Regards,

Sreedhar



---------------------------------------------------------------------
Please check that your question has not already been answered in the
FAQ before posting. <http://xml.apache.org/cocoon/faqs.html>

To unsubscribe, e-mail: <[EMAIL PROTECTED]>
For additional commands, e-mail: <[EMAIL PROTECTED]>

Reply via email to