Costin,
> > If those variable declaration problems are fixed, I'll release a new
> > 4.1.6 milestone as soon as I can fix the JNDI problems.
>
> Not yet...
>
> I attached the failed jsp.
>
> Costin
>
> [...]
>
> <%@ page language="java" %>
> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
>
> <logic:iterate id="a" name="foo" property="bar">
> </logic:iterate>
>
> <logic:present name="b">
> <logic:iterate id="a" name="foo" property="bar">
> </logic:iterate>
> </logic:present>
last and final attempt! :)
The attached patch should fix the last issue you brought up.
Since I am still waiting for my commit privileges, Kin-Man
has again volunteered to apply the patch. Thanks Kin-Man!
Jan
Executing ssh-askpass to query the password...
Warning: Remote host denied X11 forwarding, perhaps xauth program could not be run on
the server side.
? build
? build.properties
cvs server: Diffing .
cvs server: Diffing doc
cvs server: Diffing src
cvs server: Diffing src/bin
cvs server: Diffing src/share
cvs server: Diffing src/share/org
cvs server: Diffing src/share/org/apache
cvs server: Diffing src/share/org/apache/jasper
cvs server: Diffing src/share/org/apache/jasper/compiler
Index: src/share/org/apache/jasper/compiler/Generator.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
retrieving revision 1.32
diff -u -r1.32 Generator.java
--- src/share/org/apache/jasper/compiler/Generator.java 21 Jun 2002 00:59:56 -0000
1.32
+++ src/share/org/apache/jasper/compiler/Generator.java 21 Jun 2002 22:23:17 -0000
@@ -543,15 +543,6 @@
private MethodsBuffer methodsBuffer;
private int methodNesting;
- /*
- * Maps temporary scripting variable to parent of custom tag that
- * declared it
- */
- private Hashtable tmpVars;
-
- // Maps NESTED scripting var to parent of custom tag that declared it
- private Hashtable nestedVars;
-
/**
* Constructor.
*/
@@ -561,8 +552,6 @@
methodNesting = 0;
handlerInfos = new Hashtable();
tagVarNumbers = new Hashtable();
- tmpVars = new Hashtable();
- nestedVars = new Hashtable();
}
/**
@@ -1306,20 +1295,20 @@
out.printin("/* ---- ");
out.print(n.getName());
out.println(" ---- */");
+ out.printil("{");
+ out.pushIndent();
boolean implementsTryCatchFinally =
TryCatchFinally.class.isAssignableFrom(tagHandlerClass);
- /*
- * Declare variables where current contents of scripting variables
- * will be temporarily saved
- */
- declareTemporaryScriptingVariables(n);
-
// Declare scripting variables with NESTED scope
declareNestedScriptingVariables(n);
- // Save current value of scripting variables if required
+ /*
+ * Save current values of scripting variables, so that the
+ * scripting variables may be synchronized without affecting their
+ * original values
+ */
saveScriptingVariables(n);
out.printin(tagHandlerClass.getName());
@@ -1464,6 +1453,8 @@
syncScriptingVariables(n, VariableInfo.AT_END);
restoreScriptingVariables(n);
+ out.popIndent();
+ out.printil("}");
n.setEndJavaLine(out.getJavaLine());
}
@@ -1502,14 +1493,10 @@
if ((varInfos[i].getScope() == VariableInfo.NESTED)
&& varInfos[i].getDeclare()) {
String name = varInfos[i].getVarName();
- Node parent = (Node) nestedVars.get(name);
- if (parent == null || parent != n.getParent()) {
- out.printin(varInfos[i].getClassName());
- out.print(" ");
- out.print(name);
- out.println(";");
- nestedVars.put(name, n.getParent());
- }
+ out.printin(varInfos[i].getClassName());
+ out.print(" ");
+ out.print(name);
+ out.println(";");
}
}
} else {
@@ -1522,14 +1509,11 @@
if ((varInfos[i].getScope() == VariableInfo.NESTED)
&& varInfos[i].getDeclare()) {
String name = varInfos[i].getVarName();
- Node parent = (Node) nestedVars.get(name);
- if ((parent == null || parent != n.getParent())
- && idAttr.equals(name)) {
+ if (idAttr.equals(name)) {
out.printin(varInfos[i].getClassName());
out.print(" ");
out.print(name);
out.println(" = null;");
- nestedVars.put(name, n.getParent());
break;
}
}
@@ -1544,67 +1528,10 @@
name = n.getTagData().getAttributeString(
tagVarInfos[i].getNameFromAttribute());
}
- Node parent = (Node) nestedVars.get(name);
- if ((parent == null) || (parent != n.getParent())) {
- out.printin(tagVarInfos[i].getClassName());
- out.print(" ");
- out.print(name);
- out.println(";");
- nestedVars.put(name, n.getParent());
- }
- }
- }
- }
- }
-
- /*
- * This method is called as part of the custom tag's start element.
- *
- * If the given custom tag has a custom nesting level greater than 0,
- * declare temporary variables where the current values of the tag's
- * scripting variables may be saved, so these values may be restored
- * in the tag's end element.
- */
- private void declareTemporaryScriptingVariables(Node.CustomTag n) {
- if (n.getCustomNestingLevel() == 0) {
- return;
- }
-
- TagVariableInfo[] tagVarInfos = n.getTagVariableInfos();
- VariableInfo[] varInfos = n.getVariableInfos();
- if ((varInfos == null) && (tagVarInfos == null)) {
- return;
- }
-
- if (varInfos != null) {
- for (int i=0; i<varInfos.length; i++) {
- String tmpVarName = "_jspx_" + varInfos[i].getVarName()
- + "_" + n.getCustomNestingLevel();
- Node parent = (Node) tmpVars.get(tmpVarName);
- if ((parent == null) || (parent != n.getParent())) {
- out.printin(varInfos[i].getClassName());
- out.print(" ");
- out.print(tmpVarName);
- out.println(";");
- tmpVars.put(tmpVarName, n.getParent());
- }
- }
- } else {
- for (int i=0; i<tagVarInfos.length; i++) {
- String varName = tagVarInfos[i].getNameGiven();
- if (varName == null) {
- varName = n.getTagData().getAttributeString(
- tagVarInfos[i].getNameFromAttribute());
- }
- String tmpVarName = "_jspx_" + varName + "_"
- + n.getCustomNestingLevel();
- Node parent = (Node) tmpVars.get(tmpVarName);
- if ((parent == null) || (parent != n.getParent())) {
out.printin(tagVarInfos[i].getClassName());
out.print(" ");
- out.print(tmpVarName);
+ out.print(name);
out.println(";");
- tmpVars.put(tmpVarName, n.getParent());
}
}
}
@@ -1614,10 +1541,10 @@
* This method is called as part of the custom tag's start element.
*
* If the given custom tag has a custom nesting level greater than 0,
- * save the values of all its scripting variables to temporary
- * variables, so the scripting variables may be synchronized
- * without affecting the values they had at the tag's start element.
- * Those values will be restored when the tag's end element is reached.
+ * save the current values of its scripting variables to
+ * temporary variables, so those values may be restored in the tag's
+ * end element. This way, the scripting variables may be synchronized
+ * by the given tag without affecting their original values.
*/
private void saveScriptingVariables(Node.CustomTag n) {
if (n.getCustomNestingLevel() == 0) {
@@ -1635,7 +1562,9 @@
String varName = varInfos[i].getVarName();
String tmpVarName = "_jspx_" + varName + "_"
+ n.getCustomNestingLevel();
- out.printin(tmpVarName);
+ out.printin(varInfos[i].getClassName());
+ out.print(" ");
+ out.print(tmpVarName);
out.print(" = ");
out.print(varName);
out.println(";");
@@ -1645,11 +1574,13 @@
String varName = tagVarInfos[i].getNameGiven();
if (varName == null) {
varName = n.getTagData().getAttributeString(
- tagVarInfos[i].getNameFromAttribute());
+ tagVarInfos[i].getNameFromAttribute());
}
String tmpVarName = "_jspx_" + varName + "_"
+ n.getCustomNestingLevel();
- out.printin(tmpVarName);
+ out.printin(tagVarInfos[i].getClassName());
+ out.print(" ");
+ out.print(tmpVarName);
out.print(" = ");
out.print(varName);
out.println(";");
cvs server: Diffing src/share/org/apache/jasper/core
cvs server: Diffing src/share/org/apache/jasper/logging
cvs server: Diffing src/share/org/apache/jasper/resources
cvs server: Diffing src/share/org/apache/jasper/runtime
cvs server: Diffing src/share/org/apache/jasper/servlet
cvs server: Diffing src/share/org/apache/jasper/util
cvs server: Diffing src/share/org/apache/jasper/xmlparser
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>