Escapar aspas com jspBean não funciona

6 respostas
gRoOve

Olá galera, estou tentando fazer umas simulações com jsp:useBean aqui mas não consigo escapar as aspas neste exemplo:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
		<jsp:useBean id="person" type="foo.Person" class="foo.Employee" scope="page">
			<jsp:setProperty name="person" property="name" value="<%= request.getParameter("userName") %>" />
		</jsp:useBean>
    </body>
</html>

Ocorre este erro:

org.apache.jasper.JasperException: /index.jsp(17,60) Attribute value  request.getParameter("userName")  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:88)
	org.apache.jasper.compiler.Parser.parseAttributeValue(Parser.java:256)
	org.apache.jasper.compiler.Parser.parseAttribute(Parser.java:205)
	org.apache.jasper.compiler.Parser.parseAttributes(Parser.java:148)
	org.apache.jasper.compiler.Parser.parseSetProperty(Parser.java:889)
	org.apache.jasper.compiler.Parser.parseStandardAction(Parser.java:1110)
	org.apache.jasper.compiler.Parser.parseElements(Parser.java:1421)
	org.apache.jasper.compiler.Parser.parseBody(Parser.java:1634)
	org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:978)
	org.apache.jasper.compiler.Parser.parseUseBean(Parser.java:934)
	org.apache.jasper.compiler.Parser.parseStandardAction(Parser.java:1112)
	org.apache.jasper.compiler.Parser.parseElements(Parser.java:1421)
	org.apache.jasper.compiler.Parser.parse(Parser.java:130)
	org.apache.jasper.compiler.ParserController.doParse(ParserController.java:255)
	org.apache.jasper.compiler.ParserController.parse(ParserController.java:103)
	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:185)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:354)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:321)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Tentei usando contra barra () antes das aspas duplas colocadas no (“userName”), mas ai nem compila. Não entendi "/

6 Respostas

drsmachado

Você pode trocar as aspas duplas da parte html por aspas simples ou escapar no html…

gRoOve

Como assim a “parte html” ? Eu tentei substituir as aspas duplas por simples neste código, tb deu erro.

drsmachado
<jsp:setProperty name="person" property="name" value=\"<%= request.getParameter("userName") %>\" />

Ou, mais interessante, instancie uma variável e capture o valor deste parâmetro nela, aí fica mais simples

String nome = request.getParameter("userName");
<jsp:setProperty name="person" property="name" value="<%= nome %>" />
gRoOve

Se fizer da primeira forma, ocorre este erro:

quote symbol expected

Criando uma nova variável funciona, mas cara, ter que criar uma nova variável por isso? Não tem como escapar isso???

drsmachado

gRoOve:
Se fizer da primeira forma, ocorre este erro:

quote symbol expected

Criando uma nova variável funciona, mas cara, ter que criar uma nova variável por isso? Não tem como escapar isso???


Quantas árvores serão derrubadas se você criar uma nova variável?
Enfim, a sugestão foi dada…

drsmachado

Aliás, me ocorreu que você pode trocar o

<jsp:setProperty name="person" property="name" value="<%= request.getParameter("userName") %>" />

por

<jsp:setProperty name="person" property="name" value="<% out.print(request.getParameter("userName")); %>" />
Criado 4 de outubro de 2011
Ultima resposta 4 de out. de 2011
Respostas 6
Participantes 2