Here is an easy way to get and set values in request and session attributes
and session DOM's from XSP pages:

    <xsp:logic>set("request:req1", "Hello, World, from request!");</xsp:logic>
    <xsp:expr>get("request:req1")</xsp:expr>

    <xsp:logic>set("session:databases/testdb/@driver", "Hello, World, from session 
DOM!");</xsp:logic>
    <xsp:expr>get("session:databases/testdb/@driver")</xsp:expr>

It works well as-is, but should probably be made more general, cleaned up, and turned 
into a logicsheet.
The support code and three sample uses are below.

Tim

===

<?xml version="1.0"?>
<xsp:page
  language="java"
  xmlns:xsp     = "http://apache.org/xsp";
  xmlns:request = "http://apache.org/xsp/request/2.0";
  xmlns:session = "http://apache.org/xsp/session/2.0"; create-session="yes"
  xmlns:input   = "http://apache.org/cocoon/xsp/input/1.0";>

  <xsp:structure>
    <xsp:include>org.apache.commons.jxpath.JXPathContext</xsp:include>
  </xsp:structure>

  <xsp:logic>

    Object get (String path)
    {
      String protocol = null;
      String attribute = null;
      String jxpath = null;

      String[] s1 = path.split(":", 2);
      if (s1[0].equals("request")) protocol = "request-attr";
      if (s1[0].equals("session")) protocol = "session-attr";
      if (protocol == null) return null;

      String[] s2 = s1[1].split("/", 2);

      attribute = s2[0];
      if (attribute == null) return null;

      if (s2.length == 2) jxpath = s2[1];

      if (jxpath == null){
        return this._xsp_module_helper.getAttribute(objectModel, protocol, attribute, 
null);
      }else{
        org.w3c.dom.Element e =
          ((org.w3c.dom.Element)
            (this._xsp_module_helper.getAttribute(objectModel, protocol, attribute, 
null)));
        JXPathContext jxcontext = JXPathContext.newContext(e);
        return jxcontext.getValue(jxpath);
      }
    }

    void set (String path, Object value)
    {
      String protocol = null;
      String attribute = null;
      String jxpath = null;

      String[] s1 = path.split(":", 2);
      if (s1[0].equals("request")) protocol = "request-attr";
      if (s1[0].equals("session")) protocol = "session-attr";
      if (protocol == null) return;

      String[] s2 = s1[1].split("/", 2);

      attribute = s2[0];
      if (attribute == null) return;

      if (s2.length == 2) jxpath = s2[1];

      if (jxpath == null){
        if (s1[0].equals("request")) request.setAttribute(attribute, value);
        if (s1[0].equals("session")) request.getSession().setAttribute(attribute, 
value);
      }else{
        org.w3c.dom.Element e =
          ((org.w3c.dom.Element)
            (this._xsp_module_helper.getAttribute(objectModel, protocol, attribute, 
null)));
        JXPathContext jxcontext = JXPathContext.newContext(e);
        jxcontext.setValue(jxpath, value);
      }
    }

  </xsp:logic>

  <sample-page>

    <xsp:logic>set("request:req1", "Hello, World, from request!");</xsp:logic>
    <xsp:logic>set("session:ses1", "Hello, World, from session!");</xsp:logic>
    <xsp:logic>set("session:databases/testdb/@driver", "Hello, World, from session 
DOM!");</xsp:logic>

    <request-test><xsp:expr>get("request:req1")</xsp:expr></request-test>
    <session-test><xsp:expr>get("session:ses1")</xsp:expr></session-test>
    
<session-DOM-test><xsp:expr>get("session:databases/testdb/@driver")</xsp:expr></session-DOM-test>

  </sample-page>

</xsp:page>



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

Reply via email to