You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2014/05/15 10:04:40 UTC
svn commit: r1594811 - in /tomcat/trunk:
java/org/apache/jasper/compiler/Generator.java webapps/docs/changelog.xml
Author: markt
Date: Thu May 15 08:04:40 2014
New Revision: 1594811
URL: http://svn.apache.org/r1594811
Log:
Revert fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=56516
Modified:
tomcat/trunk/java/org/apache/jasper/compiler/Generator.java
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/jasper/compiler/Generator.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/Generator.java?rev=1594811&r1=1594810&r2=1594811&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/Generator.java (original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/Generator.java Thu May 15 08:04:40 2014
@@ -351,7 +351,7 @@ class Generator {
page.visit(new TagHandlerPoolVisitor(tagHandlerPoolNames));
}
- private void declareScriptingVars(Node.Nodes page)
+ private void declareTemporaryScriptingVars(Node.Nodes page)
throws JasperException {
class ScriptingVarVisitor extends Node.Visitor {
@@ -364,13 +364,6 @@ class Generator {
@Override
public void visit(Node.CustomTag n) throws JasperException {
- // Declare scripting variables so they are visible to the entire
- // page.
- declareScriptingVars(n, VariableInfo.AT_BEGIN);
- declareScriptingVars(n, VariableInfo.AT_END);
- declareScriptingVars(n, VariableInfo.NESTED);
-
- // Declare temporary scripting variables
// XXX - Actually there is no need to declare those
// "_jspx_" + varName + "_" + nestingLevel variables when we are
// inside a JspFragment.
@@ -421,42 +414,6 @@ class Generator {
visitBody(n);
}
-
- private void declareScriptingVars(Node.CustomTag n, int scope) {
-
- List<Object> vec = n.getScriptingVars(scope);
- if (vec != null) {
- for (int i = 0; i < vec.size(); i++) {
- Object elem = vec.get(i);
- if (elem instanceof VariableInfo) {
- VariableInfo varInfo = (VariableInfo) elem;
- if (varInfo.getDeclare()) {
- out.printin(varInfo.getClassName());
- out.print(" ");
- out.print(varInfo.getVarName());
- out.println(" = null;");
- }
- } else {
- TagVariableInfo tagVarInfo = (TagVariableInfo) elem;
- if (tagVarInfo.getDeclare()) {
- String varName = tagVarInfo.getNameGiven();
- if (varName == null) {
- varName = n.getTagData().getAttributeString(
- tagVarInfo.getNameFromAttribute());
- } else if (tagVarInfo.getNameFromAttribute() != null) {
- // alias
- continue;
- }
- out.printin(tagVarInfo.getClassName());
- out.print(" ");
- out.print(varName);
- out.println(" = null;");
- }
- }
- }
- }
- }
-
}
page.visit(new ScriptingVarVisitor());
@@ -710,7 +667,7 @@ class Generator {
out.printil("javax.servlet.jsp.PageContext _jspx_page_context = null;");
out.println();
- declareScriptingVars(page);
+ declareTemporaryScriptingVars(page);
out.println();
out.printil("try {");
@@ -2278,7 +2235,8 @@ class Generator {
out.println(n.getQName());
n.setBeginJavaLine(out.getJavaLine());
- // Save AT_BEGIN scripting variables
+ // Declare AT_BEGIN scripting variables
+ declareScriptingVars(n, VariableInfo.AT_BEGIN);
saveScriptingVars(n, VariableInfo.AT_BEGIN);
String tagHandlerClassName = tagHandlerClass.getCanonicalName();
@@ -2333,7 +2291,8 @@ class Generator {
out.println(" != javax.servlet.jsp.tagext.Tag.SKIP_BODY) {");
out.pushIndent();
- // Save NESTED scripting variables
+ // Declare NESTED scripting variables
+ declareScriptingVars(n, VariableInfo.NESTED);
saveScriptingVars(n, VariableInfo.NESTED);
if (n.implementsBodyTag()) {
@@ -2520,8 +2479,9 @@ class Generator {
out.printil("}");
}
- // synchronize AT_END scripting variables (must do this
+ // Declare and synchronize AT_END scripting variables (must do this
// outside the try/catch/finally block)
+ declareScriptingVars(n, VariableInfo.AT_END);
syncScriptingVars(n, VariableInfo.AT_END);
restoreScriptingVars(n, VariableInfo.AT_BEGIN);
@@ -2538,7 +2498,8 @@ class Generator {
out.printin("// ");
out.println(n.getQName());
- // Save AT_BEGIN scripting variables
+ // Declare AT_BEGIN scripting variables
+ declareScriptingVars(n, VariableInfo.AT_BEGIN);
saveScriptingVars(n, VariableInfo.AT_BEGIN);
String tagHandlerClassName = tagHandlerClass.getCanonicalName();
@@ -2591,7 +2552,8 @@ class Generator {
// Synchronize AT_BEGIN scripting variables
syncScriptingVars(n, VariableInfo.AT_BEGIN);
- // synchronize AT_END scripting variables
+ // Declare and synchronize AT_END scripting variables
+ declareScriptingVars(n, VariableInfo.AT_END);
syncScriptingVars(n, VariableInfo.AT_END);
// Resource injection
@@ -2600,6 +2562,46 @@ class Generator {
n.setEndJavaLine(out.getJavaLine());
}
+ private void declareScriptingVars(Node.CustomTag n, int scope) {
+ if (isFragment) {
+ // No need to declare Java variables, if we inside a
+ // JspFragment, because a fragment is always scriptless.
+ return;
+ }
+
+ List<Object> vec = n.getScriptingVars(scope);
+ if (vec != null) {
+ for (int i = 0; i < vec.size(); i++) {
+ Object elem = vec.get(i);
+ if (elem instanceof VariableInfo) {
+ VariableInfo varInfo = (VariableInfo) elem;
+ if (varInfo.getDeclare()) {
+ out.printin(varInfo.getClassName());
+ out.print(" ");
+ out.print(varInfo.getVarName());
+ out.println(" = null;");
+ }
+ } else {
+ TagVariableInfo tagVarInfo = (TagVariableInfo) elem;
+ if (tagVarInfo.getDeclare()) {
+ String varName = tagVarInfo.getNameGiven();
+ if (varName == null) {
+ varName = n.getTagData().getAttributeString(
+ tagVarInfo.getNameFromAttribute());
+ } else if (tagVarInfo.getNameFromAttribute() != null) {
+ // alias
+ continue;
+ }
+ out.printin(tagVarInfo.getClassName());
+ out.print(" ");
+ out.print(varName);
+ out.println(" = null;");
+ }
+ }
+ }
+ }
+ }
+
/*
* This method is called as part of the custom tag's start element.
*
@@ -3607,7 +3609,7 @@ class Generator {
generatePageScopedVariables(tagInfo);
- declareScriptingVars(tag);
+ declareTemporaryScriptingVars(tag);
out.println();
out.printil("try {");
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1594811&r1=1594810&r2=1594811&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Thu May 15 08:04:40 2014
@@ -57,11 +57,6 @@
<subsection name="Jasper">
<changelog>
<fix>
- <bug>56516</bug>: When tags require scripting variables to be declared,
- declare them at the start of the page so that they are always available
- to the entire page. (markt)
- </fix>
- <fix>
<bug>56522</bug>: When setting a value for a
<code>ValueExpression</code>, ensure that the expected coercions take
place such as a <code>null</code> string being coerced to an empty
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org