cocoon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From anto...@apache.org
Subject svn commit: rev 55536 - in cocoon/trunk: . src/blocks/xsp/java/org/apache/cocoon/components/language/markup/xsp/java src/documentation/xdocs/userdocs/flow
Date Mon, 25 Oct 2004 22:03:39 GMT
Author: antonio
Date: Mon Oct 25 15:03:38 2004
New Revision: 55536

Modified:
   cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/markup/xsp/java/jpath.xsl
   cocoon/trunk/src/documentation/xdocs/userdocs/flow/jpath.xml
   cocoon/trunk/status.xml
Log:
Fix bug #31564- [XSP] - JXPath logicsheet: Allow use relative contexts in <jxpath:for-each>.
Add a new tag <jpath:set-lenient lenient='true|false'>

Modified: cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/markup/xsp/java/jpath.xsl
==============================================================================
--- cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/markup/xsp/java/jpath.xsl
(original)
+++ cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/markup/xsp/java/jpath.xsl
Mon Oct 25 15:03:38 2004
@@ -46,6 +46,7 @@
         <xsp:include>org.apache.cocoon.components.flow.FlowHelper</xsp:include>
         <xsp:include>org.apache.commons.jxpath.JXPathContext</xsp:include>
         <xsp:include>org.apache.commons.jxpath.CompiledExpression</xsp:include>
+        <xsp:include>org.apache.commons.jxpath.Pointer</xsp:include>
       </xsp:structure>
 
       <xsp:logic>
@@ -164,22 +165,25 @@
       <xsl:when test="@select">
         <xsp:logic>
           {
-            Iterator iter_<xsl:value-of select="generate-id(.)"/>
-              = <xsl:call-template name="get-var-name">
-                  <xsl:with-param name="expr" select="@select"/>
-                </xsl:call-template>
-                .iterate(jxpathContext);
             JXPathContext <xsl:value-of select="$old-context"/> = jxpathContext;
-            while (iter_<xsl:value-of select="generate-id(.)"/>.hasNext()) {
-              Object current_<xsl:value-of select="generate-id(.)"/> = iter_<xsl:value-of
select="generate-id(.)"/>.next();
-              jxpathContext = JXPathContext.newContext(current_<xsl:value-of select="generate-id(.)"/>);
+            try {
+              Iterator iter_<xsl:value-of select="generate-id(.)"/>
+                = <xsl:call-template name="get-var-name">
+                    <xsl:with-param name="expr" select="@select"/>
+                  </xsl:call-template>
+                  .iteratePointers(jxpathContext);
+              while (iter_<xsl:value-of select="generate-id(.)"/>.hasNext()) {
+                jxpathContext = <xsl:value-of select="$old-context"/>
+                  .getRelativeContext((Pointer)iter_<xsl:value-of select="generate-id(.)"/>.next());
         </xsp:logic>
 
         <xsl:apply-templates/>
 
         <xsp:logic>
+              }
+            } finally {
+              jxpathContext = <xsl:value-of select="$old-context"/>;
             }
-            jxpathContext = <xsl:value-of select="$old-context"/>;
           }
         </xsp:logic>
       </xsl:when>
@@ -223,6 +227,29 @@
     </xsp:expr>
   </xsl:template>
 
+  <xsl:template match="jpath:set-lenient">
+    <xsl:choose>
+      <xsl:when test="*">
+        <xsp:logic>
+          {
+            boolean __jxpathLenient = jxpathContext.isLenient();
+            try {
+              jxpathContext.setLenient(<xsl:value-of select="@lenient"/>);
+        </xsp:logic>
+        <xsl:apply-templates/>
+        <xsp:logic>
+            } finally {
+              jxpathContext.setLenient(__jxpathLenient);
+            }
+          }
+        </xsp:logic>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsp:logic>jxpathContext.setLenient(<xsl:value-of select="@lenient"/>);</xsp:logic>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
   <xsl:template match="@*|*|text()|processing-instruction()">
     <!-- Catch all template. Just pass along unmodified everything we
          don't handle. -->
@@ -230,6 +257,5 @@
       <xsl:apply-templates select="@*|*|text()|processing-instruction()"/>
     </xsl:copy>
   </xsl:template>
-
 
 </xsl:stylesheet>

Modified: cocoon/trunk/src/documentation/xdocs/userdocs/flow/jpath.xml
==============================================================================
--- cocoon/trunk/src/documentation/xdocs/userdocs/flow/jpath.xml	(original)
+++ cocoon/trunk/src/documentation/xdocs/userdocs/flow/jpath.xml	Mon Oct 25 15:03:38 2004
@@ -34,6 +34,7 @@
      alternate bean properties. It is based on
      <link href="http://jakarta.apache.org/commons/jxpath">Apache JXPath</link>.
     </p>
+    <p>Samples of this Logic Sheet are avaliable in the XSP implementation of the petstore
block</p>
    </s1>
    <s1 title ="Tags">
     <p>The JPath tags are defined in the namespace</p>
@@ -119,6 +120,27 @@
      <source>
 &lt;xsp:attribute name="action"&gt;&lt;xsp:expr&gt;&lt;jpath:continuation/&gt;+".form"&lt;/xsp:expr&gt;&lt;/xsp:attribute&gt;
      </source>
+    </s2>
+    <s2 title="set-lenient">
+      <note>Since Cocoon 2.1.6</note>
+      <p>
+        The <code>set-lenient</code> tag switch the lenient setting of jxpath.
+        By default it is set to false. If set to true, xpaths that don't point to an 
+        object or a set of them will return null (Instead of that annoying exception). 
+        Saves all the checking if you can accept nulls and are sure there are no typos.
+      </p>
+      <p>
+        If the tag contains child elements it will scope the setting for the enclosed
+        elements, otherwise it is a global setting. You can't nest <jpath:set-lenient>
+        tags.
+      </p>
+      <source>
+        &lt;jpath:set-lenient lenient="true|false"&gt;
+      </source>
+      <p>Example:</p>
+      <source>
+        &lt;jpath:set-lenient lenient="true"&gt;
+      </source>
     </s2>
    </s1>
   </body>

Modified: cocoon/trunk/status.xml
==============================================================================
--- cocoon/trunk/status.xml	(original)
+++ cocoon/trunk/status.xml	Mon Oct 25 15:03:38 2004
@@ -319,6 +319,10 @@
    </action>
  </release>
  <release version="2.1.6" date="TBD">
+   <action dev="AG" type="fix" fixes-bug="31564" due-to="Gunnar Brand" due-to-email="g.brand@interface-business.de">
+     XSP - JXPath logicsheet: Allow use relative contexts in &lt;jxpath:for-each&gt;.
+           Add a new tag &lt;jpath:set-lenient lenient="true|false"&gt;
+   </action>
    <action dev="AG" type="update">
      Updated commons-httpclient to 2.0.2
    </action>

Mime
View raw message