arron 02/03/13 05:13:28
Modified: src/share/org/apache/struts/taglib/nested
NestedPropertyHelper.java NestedPropertyTag.java
NestedRootTag.java
src/share/org/apache/struts/taglib/nested/html
NestedFormTag.java
src/share/org/apache/struts/taglib/nested/logic
NestedIterateTag.java
Added: src/share/org/apache/struts/taglib/nested
NestedReference.java
Log:
Allowing the details of a nested structure to be maintained through to a dynamicly
included JSP.
Revision Changes Path
1.6 +35 -6
jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedPropertyHelper.java
Index: NestedPropertyHelper.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedPropertyHelper.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- NestedPropertyHelper.java 12 Feb 2002 07:01:57 -0000 1.5
+++ NestedPropertyHelper.java 13 Mar 2002 13:13:28 -0000 1.6
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedPropertyHelper.java,v
1.5 2002/02/12 07:01:57 arron Exp $
- * $Revision: 1.5 $
- * $Date: 2002/02/12 07:01:57 $
+ * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedPropertyHelper.java,v
1.6 2002/03/13 13:13:28 arron Exp $
+ * $Revision: 1.6 $
+ * $Date: 2002/03/13 13:13:28 $
* ====================================================================
*
* The Apache Software License, Version 1.1
@@ -62,6 +62,7 @@
import java.util.StringTokenizer;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
+import javax.servlet.http.HttpSession;
import org.apache.struts.taglib.nested.html.*;
import org.apache.struts.taglib.nested.logic.*;
import org.apache.struts.taglib.html.FormTag;
@@ -76,10 +77,35 @@
*
* @author Arron Bates
* @since Struts 1.1
- * @version $Revision: 1.5 $ $Date: 2002/02/12 07:01:57 $
+ * @version $Revision: 1.6 $ $Date: 2002/03/13 13:13:28 $
*/
public class NestedPropertyHelper {
+ /* key that the tags can rely on to set the details against */
+ public static final String NESTED_INCLUDES_KEY = "<nested-includes-key/>";
+
+ /** Sets the passed reference to the session object, and returns any reference
+ * that was already there
+ * @param session User's session object
+ * @param reference New reference to put into the session
+ */
+ public static final NestedReference setIncludeReference(HttpSession session,
+ NestedReference reference) {
+ /* get the old one if any */
+ NestedReference nr = (NestedReference)
+ session.getAttribute(NESTED_INCLUDES_KEY);
+ if (reference != null) {
+ /* put in the new one */
+ session.setAttribute(NESTED_INCLUDES_KEY, reference);
+ } else {
+ /* null target, just remove it */
+ session.removeAttribute(NESTED_INCLUDES_KEY);
+ }
+ /* return the old */
+ return nr;
+ }
+
+
/**
* The working horse method.
@@ -128,8 +154,7 @@
public static String getNestedProperty(String property, Tag parentTag) {
/* if we're just under a root tag no work required */
- if ((parentTag instanceof NestedRootTag)
- || (parentTag instanceof FormTag)) {
+ if (parentTag instanceof FormTag) {
/* don't forget to take care of the relative properties */
if (property.indexOf('/') == -1) {
return property;
@@ -151,6 +176,10 @@
property = getRelativeProperty(property,nestedParent.getNestedProperty());
}
+ /* Some properties may be at the start of their hierarchy */
+ if (property.startsWith(".")) {
+ return property.substring(1, property.length());
+ }
return property;
}
1.3 +21 -4
jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedPropertyTag.java
Index: NestedPropertyTag.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedPropertyTag.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- NestedPropertyTag.java 22 Jan 2002 03:30:50 -0000 1.2
+++ NestedPropertyTag.java 13 Mar 2002 13:13:28 -0000 1.3
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedPropertyTag.java,v
1.2 2002/01/22 03:30:50 arron Exp $
- * $Revision: 1.2 $
- * $Date: 2002/01/22 03:30:50 $
+ * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedPropertyTag.java,v
1.3 2002/03/13 13:13:28 arron Exp $
+ * $Revision: 1.3 $
+ * $Date: 2002/03/13 13:13:28 $
* ====================================================================
*
* The Apache Software License, Version 1.1
@@ -61,6 +61,7 @@
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
+import javax.servlet.http.HttpSession;
import org.apache.struts.util.*;
/**
@@ -75,7 +76,7 @@
*
* @author Arron Bates
* @since Struts 1.1
- * @version $Revision: 1.2 $ $Date: 2002/01/22 03:30:50 $
+ * @version $Revision: 1.3 $ $Date: 2002/03/13 13:13:28 $
*/
public class NestedPropertyTag extends BodyTagSupport implements
NestedParentSupport, NestedNameSupport {
@@ -134,6 +135,13 @@
isNesting = true;
NestedPropertyHelper.setNestedProperties(this);
isNesting = false;
+
+ /* make the current reference */
+ NestedReference nr = new NestedReference(getName(), getNestedProperty());
+ /* replace and store old session */
+ HttpSession session = (HttpSession)pageContext.getSession();
+ originalReference = NestedPropertyHelper.setIncludeReference(session,nr);
+
return (EVAL_BODY_TAG);
}
@@ -160,6 +168,12 @@
* @return int JSP continuation directive.
*/
public int doEndTag() throws JspException {
+
+ /* set the reference back */
+ HttpSession session = (HttpSession)pageContext.getSession();
+ NestedPropertyHelper.setIncludeReference(session, originalReference);
+ originalReference = null;
+
return (EVAL_PAGE);
}
@@ -180,4 +194,7 @@
/* hold original property */
private String originalProperty = null;
private boolean isNesting = false;
+
+ /* includes nested references */
+ private NestedReference originalReference;
}
1.3 +28 -5
jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedRootTag.java
Index: NestedRootTag.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedRootTag.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- NestedRootTag.java 22 Jan 2002 03:30:50 -0000 1.2
+++ NestedRootTag.java 13 Mar 2002 13:13:28 -0000 1.3
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedRootTag.java,v
1.2 2002/01/22 03:30:50 arron Exp $
- * $Revision: 1.2 $
- * $Date: 2002/01/22 03:30:50 $
+ * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedRootTag.java,v
1.3 2002/03/13 13:13:28 arron Exp $
+ * $Revision: 1.3 $
+ * $Date: 2002/03/13 13:13:28 $
* ====================================================================
*
* The Apache Software License, Version 1.1
@@ -61,6 +61,7 @@
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
+import javax.servlet.http.HttpSession;
import org.apache.struts.util.*;
/**
@@ -80,7 +81,7 @@
*
* @author Arron Bates
* @since Struts 1.1
- * @version $Revision: 1.2 $ $Date: 2002/01/22 03:30:50 $
+ * @version $Revision: 1.3 $ $Date: 2002/03/13 13:13:28 $
*/
public class NestedRootTag extends BodyTagSupport implements NestedParentSupport,
NestedNameSupport {
@@ -113,7 +114,7 @@
* @return String value of the nestedProperty property
*/
public String getNestedProperty() {
- return "";
+ return this.nestedProperty;
}
/**
@@ -123,6 +124,20 @@
* @return int JSP continuation directive.
*/
public int doStartTag() throws JspException {
+
+ /* set the nested reference for possible inclusions etc */
+ HttpSession session = (HttpSession)pageContext.getSession();
+ reference = (NestedReference)
+ session.getAttribute(NestedPropertyHelper.NESTED_INCLUDES_KEY);
+
+ if (name == null) {
+ this.name = reference.getBeanName();
+ this.nestedProperty = reference.getNestedProperty();
+ } else {
+ NestedReference newRef = new NestedReference(this.name, "");
+ session.setAttribute(NestedPropertyHelper.NESTED_INCLUDES_KEY, newRef);
+ }
+
return (EVAL_BODY_TAG);
}
@@ -147,6 +162,10 @@
* @return int JSP continuation directive.
*/
public int doEndTag() throws JspException {
+ /* reset the reference */
+ HttpSession session = (HttpSession)pageContext.getSession();
+ NestedPropertyHelper.setIncludeReference(session, reference);
+
return (EVAL_PAGE);
}
@@ -159,5 +178,9 @@
this.name = null;
}
+ /* usual member variables */
private String name = null;
+ private String nestedProperty = "";
+
+ private NestedReference reference;
}
1.1
jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedReference.java
Index: NestedReference.java
===================================================================
/*
* $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedReference.java,v
1.1 2002/03/13 13:13:28 arron Exp $
* $Revision: 1.1 $
* $Date: 2002/03/13 13:13:28 $
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Struts", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.struts.taglib.nested;
/**
* So that a nested hierarchy can penetrate a dynamic JSP include, this class
* will hold the details of a bean name and nested property.
*
* @author Arron Bates
* @since Struts 1.1
* @version $Revision: 1.1 $
*/
public class NestedReference {
/**
* Constructor takes the all the relevant details to init the object.
* @param name String name of the bean that the include is to reference
* @param property String nested property value that the include will be
* continuing on with.
*/
public NestedReference(String name, String property) {
this.beanName = name;
this.property = property;
}
/** Getter for the bean name
* @return String value that will be the bean's reference
*/
public String getBeanName() {
return beanName;
}
/** Setter for the bean name
* @param newName String value to set the bean reference.
*/
public void setBeanName(String newName) {
this.beanName = newName;
}
/** Getter for the nested property
* @return String value that is the nested property for the current nesting
*/
public String getNestedProperty() {
return this.property;
}
/** Setter for the nested property
* @param newProperty String value of the new current nesting level
*/
public void setNestedProperty(String newProperty) {
this.property = newProperty;
}
/* Usual member variables */
private String beanName;
private String property;
}
1.3 +41 -4
jakarta-struts/src/share/org/apache/struts/taglib/nested/html/NestedFormTag.java
Index: NestedFormTag.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/html/NestedFormTag.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- NestedFormTag.java 22 Jan 2002 03:30:50 -0000 1.2
+++ NestedFormTag.java 13 Mar 2002 13:13:28 -0000 1.3
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/html/NestedFormTag.java,v
1.2 2002/01/22 03:30:50 arron Exp $
- * $Revision: 1.2 $
- * $Date: 2002/01/22 03:30:50 $
+ * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/html/NestedFormTag.java,v
1.3 2002/03/13 13:13:28 arron Exp $
+ * $Revision: 1.3 $
+ * $Date: 2002/03/13 13:13:28 $
* ====================================================================
*
* The Apache Software License, Version 1.1
@@ -62,13 +62,14 @@
import org.apache.struts.taglib.nested.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
+import javax.servlet.http.HttpSession;
import org.apache.struts.taglib.html.FormTag;
/**
* NestedFormTag.
* @author Arron Bates
* @since Struts 1.1
- * @version $Revision: 1.2 $ $Date: 2002/01/22 03:30:50 $
+ * @version $Revision: 1.3 $ $Date: 2002/03/13 13:13:28 $
*/
public class NestedFormTag extends FormTag implements NestedParentSupport {
@@ -83,5 +84,41 @@
public String getProperty() {
return "";
}
+
public void setProperty(String newProperty) {}
+
+
+ /**
+ * Overriding to allow the chance to set the details of the system, so that
+ * dynamic includes can be possible
+ * @return int JSP continuation directive.
+ */
+ public int doStartTag() throws JspException {
+ /* store original result */
+ int temp = super.doStartTag();
+
+ /* set the details */
+ HttpSession session = (HttpSession)pageContext.getSession();
+ NestedReference nr = new NestedReference(getName(), getNestedProperty());
+ NestedPropertyHelper.setIncludeReference(session, nr);
+
+ /* continue */
+ return temp;
+ }
+
+ /**
+ * This is only overriden to clean up the include reference
+ * @return int JSP continuation directive.
+ */
+ public int doAfterBody() throws JspException {
+ /* store original result */
+ int temp = super.doAfterBody();
+
+ /* all done. clean up */
+ HttpSession session = (HttpSession)pageContext.getSession();
+ NestedPropertyHelper.setIncludeReference(session, null);
+
+ /* return super result */
+ return temp;
+ }
}
1.3 +48 -6
jakarta-struts/src/share/org/apache/struts/taglib/nested/logic/NestedIterateTag.java
Index: NestedIterateTag.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/logic/NestedIterateTag.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- NestedIterateTag.java 22 Jan 2002 03:30:51 -0000 1.2
+++ NestedIterateTag.java 13 Mar 2002 13:13:28 -0000 1.3
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/logic/NestedIterateTag.java,v
1.2 2002/01/22 03:30:51 arron Exp $
- * $Revision: 1.2 $
- * $Date: 2002/01/22 03:30:51 $
+ * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/logic/NestedIterateTag.java,v
1.3 2002/03/13 13:13:28 arron Exp $
+ * $Revision: 1.3 $
+ * $Date: 2002/03/13 13:13:28 $
* ====================================================================
*
* The Apache Software License, Version 1.1
@@ -61,6 +61,7 @@
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
+import javax.servlet.http.HttpSession;
import org.apache.struts.taglib.nested.*;
import org.apache.struts.taglib.html.FormTag;
import org.apache.struts.taglib.logic.IterateTag;
@@ -72,7 +73,7 @@
*
* @author Arron Bates
* @since Struts 1.1
- * @version $Revision: 1.2 $ $Date: 2002/01/22 03:30:51 $
+ * @version $Revision: 1.3 $ $Date: 2002/03/13 13:13:28 $
*/
public class NestedIterateTag extends IterateTag implements NestedParentSupport,
NestedNameSupport {
@@ -108,8 +109,18 @@
NestedPropertyHelper.setNestedProperties(this);
isNesting = false;
- /* do the tag */
- return super.doStartTag();
+
+ /* get the original result */
+ int temp = super.doStartTag();
+
+ /* set the include reference */
+ HttpSession session = (HttpSession)pageContext.getSession();
+ currentReference = new NestedReference(getName(), getNestedProperty());
+ originalReference = NestedPropertyHelper.setIncludeReference(session,
+ currentReference);
+
+ /* return the result */
+ return temp;
}
/** this is overridden so that properties being set by the JSP page aren't
@@ -128,7 +139,38 @@
}
}
+
+ /**
+ * This is only overriden as the include reference will need it's index
+ * updated.
+ *
+ * @return int JSP continuation directive.
+ */
+ public int doAfterBody() throws JspException {
+ /* store original result */
+ int temp = super.doAfterBody();
+
+ if (temp != SKIP_BODY) {
+ /* set the new reference */
+ currentReference.setNestedProperty(getNestedProperty());
+ } else {
+ /* all done. clean up */
+ currentReference = null;
+
+ HttpSession session = (HttpSession)pageContext.getSession();
+ NestedPropertyHelper.setIncludeReference(session, originalReference);
+ originalReference = null;
+ }
+
+ /* return super result */
+ return temp;
+ }
+
/* hold original property */
private String originalProperty = null;
private boolean isNesting = false;
+
+ /* includes nested references */
+ private NestedReference originalReference;
+ private NestedReference currentReference;
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>