今天接了个同事的半成品网站需要继续完成,熟悉网站的时候出现了以下错误
org.apache.jasper.JasperException: /jsp/index_f_left.jsp(135,84) Attribute value new Integer[] {Integer.valueOf((String)db.get("id"))} is quoted with " which must be escaped when used within the value
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:198)
org.apache.jasper.compiler.Parser.parseQuoted(Parser.java:301)
org.apache.jasper.compiler.Parser.parseAttributeValue(Parser.java:250)
org.apache.jasper.compiler.Parser.parseAttribute(Parser.java:212)
org.apache.jasper.compiler.Parser.parseAttributes(Parser.java:155)
org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1252)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1467)
org.apache.jasper.compiler.Parser.parseBody(Parser.java:1675)
org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:1022)
org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1290)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1467)
org.apache.jasper.compiler.Parser.parseBody(Parser.java:1675)
org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:1022)
org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1290)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1467)
org.apache.jasper.compiler.Parser.parseBody(Parser.java:1675)
org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:1022)
org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1290)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1467)
org.apache.jasper.compiler.Parser.parse(Parser.java:138)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:216)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:103)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:154)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:315)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:282)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
org.apache.struts.action.RequestProcessor.internalModuleRelativeForward(RequestProcessor.java:1001)
org.apache.struts.action.RequestProcessor.processForward(RequestProcessor.java:560)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:209)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
错误原因是同事使用Tomcat5.0,我使用的是Tomcat6.0,后来测试,Tomcat5.5及Tocmcat6.0对于页面标签的属性value中的引号需要使用"\"转译。
例如,Tomcat5.0中以下写法没有问题
variables="<%=new Integer[] {Integer.valueOf((String)db.get("id"))}%>"
而在Tomcat5.5及Tomcat6.0中需要这样的写法
variables="<%=new Integer[] {Integer.valueOf((String)db.get(\"id\"))}%>"