> This is a wild guess, but do you use <xsl:value-of ...> in the
> template of the <mylib:mytag>?
No. It just contains some logic.
Here's my setup:
Cocoon 1.8.2
Weblogic 5.1.0
Solaris 2.6
JDK 1.3
and here's the files (names changed to protect the innocent):
index.xml
------------------
<?xml version="1.0"?>
<?cocoon-process type="xsp"?>
<?cocoon-process type="xslt"?>
<?xml-stylesheet href="index.xsl" type="text/xsl"?>
<!DOCTYPE xsp:page SYSTEM "xsp-page.dtd">
<xsp:page language="java"
xmlns:myutil="http://my.company.com/XSPTagLib/MyUtil"
xmlns:xsp="http://www.apache.org/1999/XSP/Core"
xmlns:util="http://www.apache.org/1999/XSP/Util"
xmlns:legacy="http://my.company.com/XSPTagLib/Legacy"
>
<page>
<title>Search</title>
<legacy:get-results c="emp"/>
</page>
</xsp:page>
Legacy taglib (legacy.xsl)
-----------------------------------
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsp="http://www.apache.org/1999/XSP/Core"
xmlns:util="http://www.apache.org/1999/XSP/Util"
xmlns:legacy="http://my.company.com/XSPTagLib/Legacy"
xmlns:myutil="http://my.company.com/XSPTagLib/MyUtil"
version="1.0"
>
<xsl:template match="xsp:page">
<xsp:page>
<xsl:apply-templates select="@*"/>
<xsp:structure>
<xsp:include>my.taglib.utils.XSPLegacyLibrary</xsp:include>
</xsp:structure>
<xsl:apply-templates/>
</xsp:page>
</xsl:template>
<xsl:template match="legacy:get-legacy-data" name="get-legacy-data">
<xsl:param name="c"><xsl:value-of select="@c"/></xsl:param>
<xsl:param name="t"><xsl:value-of select="@t"/></xsl:param>
<xsl:param name="q"><xsl:value-of select="@q"/></xsl:param>
<xsl:param name="search-parameters"><xsl:value-of
select="legacy:search-parameters"/></xsl:param>
<myutil:process-params/>
<xsp:logic>
String qp = null;
Enumeration keys = queryParams.keys();
if ( ( keys != null ) && ( keys.hasMoreElements() )
) {
while ( keys.hasMoreElements() ) {
String k = (String) keys.nextElement();
Vector v = (Vector) queryParams.get( k );
for(int i = 0; i < v.size(); i++) {
qp += "&" + k + "=" + v.get(i);
}
}
}
</xsp:logic>
<xsl:variable name="query-string">
<xsl:choose>
<xsl:when test="$search-parameters != ''">
<xsl:for-each
select="$search-parameters/legacy:search-parameter">&<xsl:value-of
select="@name"/>=<xsl:value-of select="@value"/></xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$q"/>
</xsl:otherwise>
</xsl:choose>
<xsp:expr>qp</xsp:expr>
</xsl:variable>
<util:include-expr><util:expr>
XSPLegacyLibrary.getLegacyData(
"<xsl:value-of select="$c"/>",
"<xsl:value-of
select="$query-string"/>",
'<xsl:value-of select="$t"/>',
)
</util:expr></util:include-expr>
</xsl:template>
<xsl:template match="@*|*|text()|processing-instruction()">
<xsl:copy>
<xsl:apply-templates
select="@*|*|text()|processing-instruction()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
My Utility Taglib (myutil.xsl)
---------------------------------
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsp="http://www.apache.org/1999/XSP/Core"
xmlns:myutil="http://my.company.com/XSPTagLib/MyUtil"
xmlns:legacy="http://my.company.com/XSPTagLib/Legacy"
xmlns:util="http://www.apache.org/1999/XSP/Util"
version="1.0"
>
<xsl:template match="xsp:page">
<xsp:page>
<xsl:apply-templates select="@*"/>
<xsp:logic>
Hashtable queryParams = new Hashtable();
</xsp:logic>
<xsl:apply-templates/>
</xsp:page>
</xsl:template>
<xsl:template match="myutil:process-params">
<xsp:logic>
queryParams.clear();
Enumeration e = request.getParameterNames();
if ((e != null) && (e.hasMoreElements())) {
while (e.hasMoreElements()) {
String k = (String) e.nextElement();
String vals[] =
request.getParameterValues(k);
Vector v = new Vector( Arrays.asList( vals )
);
queryParams.put( k, v );
}
}
</xsp:logic>
</xsl:template>
<xsl:template match="@*|*|text()|processing-instruction()">
<xsl:copy>
<xsl:apply-templates
select="@*|*|text()|processing-instruction()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
>From the generated Java code (_index.xml)
--------------------------------------------
xspParentNode = xspCurrentNode;
xspNodeStack.push(xspParentNode);
xspCurrentNode = document.createElement("myutil:process-params"); // NOT
PROCESSING THIS TAG!
xspParentNode.appendChild(xspCurrentNode);
((Element) xspCurrentNode).normalize();
xspCurrentNode = (Node) xspNodeStack.pop();
String qp = null;
Enumeration keys = queryParams.keys();
if ( ( keys != null ) && ( keys.hasMoreElements() ) ) {
while ( keys.hasMoreElements() ) {
String k = (String) keys.nextElement();
Vector v = (Vector) queryParams.get( k );
for(int i = 0; i < v.size(); i++) {
qp += "&" + k + "=" + v.get(i);
}
}
}
xspCurrentNode.appendChild(
xspExpr(
this.xspParser.parse(
new InputSource(
new StringReader(
String.valueOf(
XSPLegacyLibrary.getLegacyData(
"emp",
"qp",
'3',
)
)
)
)
).getDocumentElement()
, document)
);
So, as you can clearly see :) , the <util:include-expr> and <util:expr> are
being processed, but <myutil:process-params/> is not. Is the order of the
namespace declarations significant?
Thanks,
William Bagby.
-----Original Message-----
From: Christian Haul [mailto:[EMAIL PROTECTED]]
Sent: Thursday, June 21, 2001 12:16 PM
To: [EMAIL PROTECTED]
Cc: [EMAIL PROTECTED]
Subject: Re: XSP: How to use one custom taglib from within another
On 20.Jun.2001 -- 12:11 PM, William Bagby wrote:
> I am having trouble using one of my custom tag libraries from within
> another. I wrote a "utility" taglib which consists of some
generic methods
> and such, and I am trying to use one of the tags like this:
>
> <xsl:template match="mylib:mytag">
> ...
> <myUtilLib:process-request/>
> ...
>
> </xsl:template>
>
> Yet in my generated code, the tag is being inserted as a
plain old element
> node, and no processing is being done with it. Additionally,
I am also
> using Cocoon's built-in <util> taglib, and it's being
processed just fine.
> I know *something* is being done with my Utility library
because the code
> inside the <xsl:template match="xsp:page"> logic portion is
being inserted
> as expected.
>
> I have tried various things, such as putting it inside/outside the
> <xsp:logic> tag, and declaring the namespace in my other
taglib, but it
> still won't work. I've looked in the mailing list archive,
and on the FAQ,
> but the information on mulitple XSP taglibs is sketchy, and I've seen
> conflicting information. Some say the "order of the
namespace declarations
> is important", some say otherwise. And what about this enigmatic
> <?xsp-logicsheet?> PI?
>
> Any suggestions?
This is a wild guess, but do you use <xsl:value-of ...> in the
template of the <mylib:mytag>? If so, try to change it to <xsl:copy-of
...>.
Why? value-of inserts one text node while copy-of inserts a tree.
If this doesn't help, provide us with more info (which version of
cocoon, your taglibs, your cocoon.xconf)
Chris.
--
C h r i s t i a n H a u l
[EMAIL PROTECTED]
fingerprint: 99B0 1D9D 7919 644A 4837 7D73 FEF9 6856 335A 9E08
---------------------------------------------------------------------
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]>
---------------------------------------------------------------------
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]>