Subject: Re: setting TopLevel variables externally with XT From: "Jon Smirl" <jonsmirl@xxxxxxxxxxxx> Date: Wed, 28 Jul 1999 19:16:16 -0400 |
I just got this working. I figured it out by looking at how extension functions are supported. my servlet uses... xsl.setGlobal("browser", "string('" + s + "')"); xsl.setGlobal("response", res); stylesheet refers to $response with... <xsl:value-of select="logon:redirect($response)"/> to implement in XT SheetImpl add.... public void setGlobal(String variable, Object value) throws XSLException { Name var = nameTable.createName(variable); variableExprTable.put(var, new ExternalObjectExpr(value)); } in xsl/epr add a new class... package com.jclark.xsl.expr; import com.jclark.xsl.om.*; public class ExternalObjectExpr extends ConvertibleVariantExpr { private final Object obj; public ExternalObjectExpr(Object obj) { this.obj = obj; } public Variant eval(Node node, ExprContext context) throws XSLException { if (obj instanceof String) return new StringVariant((String)obj); if (obj instanceof Number) return new NumberVariant(((Number)obj).doubleValue()); if (obj instanceof Boolean) return new BooleanVariant(((Boolean)obj).booleanValue()); if (obj instanceof NodeIterator) return new NodeSetVariant((NodeIterator)obj); if (obj instanceof Node) return new NodeSetVariant(new SingleNodeIterator((Node)obj)); if (obj instanceof Variant) return (Variant)obj; return new ObjectVariant(obj); } } According to the spec there should be an <xsl:param name="response" /> Then I wouldn't use createName on response I would check instead to make sure it had been declared. Jon Smirl jonsmirl@xxxxxxxxxxxx XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: setting TopLevel variables exte, Maxime Levesque | Thread | HowTo?: Remove dublicates from a no, Jarno Elovirta |
RE: setting TopLevel variables exte, Maxime Levesque | Date | HowTo?: Remove dublicates from a no, Jarno Elovirta |
Month |