kinman 2002/06/12 15:08:29
Modified: jasper2/src/share/org/apache/jasper/compiler Generator.java
Log:
- If the page attribute for jsp:include or jsp:forward contains a '?',
then the separator after the page should be '&' instead of '?'.
Revision Changes Path
1.27 +24 -11
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java
Index: Generator.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- Generator.java 12 Jun 2002 20:19:32 -0000 1.26
+++ Generator.java 12 Jun 2002 22:08:28 -0000 1.27
@@ -507,26 +507,39 @@
*
* @param n the parent node for the param action nodes.
*/
- private void printParams(Node n) throws JasperException {
+ private void printParams(Node n, Node.JspAttribute page)
+ throws JasperException {
class ParamVisitor extends Node.Visitor {
- char separator = '?';
+ String separator;
+
+ ParamVisitor(String separator){
+ this.separator = separator;
+ }
public void visit(Node.ParamAction n) throws JasperException {
- out.print(" + \"");
+ out.print(" + ");
out.print(separator);
+ out.print(" + \"");
out.print(n.getAttributeValue("name"));
out.print("=\" + ");
out.print(attributeValue(n.getValue(), true));
// The separator is '&' after the second use
- separator = '&';
+ separator = "\"&\"";
}
}
+ String pValue = page.getValue();
+ String sep;
+ if (page.isExpression()) {
+ sep = "((" + pValue + ").indexOf('?')>0? '&': '?')";
+ } else {
+ sep = pValue.indexOf('?')>0? "\"&\"": "\"?\"";
+ }
if (n.getBody() != null) {
- n.getBody().visit(new ParamVisitor());
+ n.getBody().visit(new ParamVisitor(sep));
}
}
@@ -554,7 +567,7 @@
out.printin("JspRuntimeLibrary.include(request, response, ");
out.print(attributeValue(n.getPage(), false));
- printParams(n);
+ printParams(n, n.getPage());
out.println(", out, " + isFlush + ");");
n.setEndJavaLine(out.getJavaLine());
@@ -568,8 +581,8 @@
out.printil("if (true) {"); // So that javac won't complain about
out.pushIndent(); // codes after "return"
out.printin("pageContext.forward(");
- out.print (attributeValue(n.getPage(), false));
- printParams(n);
+ out.print(attributeValue(n.getPage(), false));
+ printParams(n, n.getPage());
out.println(");");
out.printil((methodNesting > 0)? "return true;": "return;");
out.popIndent();
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>