Fórum Passar parâmetros para outra tela com Javascript #4039
26/03/2009
0
Tentei fazer assim:
<jsp:root version="1.2" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:display="urn:jsptld:http://displaytag.sf.net">
<jsp:directive.page contentType="text/html; charset=UTF8" />
<jsp:directive.page import="com.br.controle.*" />
<h2>Pessoas Cadastradas no Sistema</h2>
<script type="text/javascript" language="javascript">
function listaEstadoCivil(){
window.opener.location ="../listas/listarestadocivil.jsp?parametro=1" ;
}
</script>
<script type="text/javascript">
function adicionaParam(usuario,senha){
var parametro1 = document.getElementById(usuario);
var parametro2 = document.getElementById("11");
window.open.location ="../listas/listarestadocivil.jsp?parametro1=" + parametro1;
return true;
}
</script>
<head>
<link rel="stylesheet" href="../../css/cruzeiro.css" type="text/css" />
</head>
<jsp:scriptlet>
ControleLogin controleLogin = new ControleLogin();
request.setAttribute( "colecao", controleLogin.getTodosUsuarios());
</jsp:scriptlet>
<display:table name="colecao" export="true" class="table" style="width:80%; text-align:center;">
<display:setProperty name="export.pdf" value="true" />
<display:column property="usuario" style="font-size: 12pt; " href="javascript:adicionaParam('${colecao.usuario1}','${colecao.grupo)');"/>
<display:column property="grupo" style="font-size: 10pt; " />
<display:column property="senha" paramId="senha" style="font-size: 10pt;"/>
</display:table>
<td height="50"><a target="iframe" href="/CruzeirodoSul/pages/cadastros/cadastrarusuario.jsp" style="color: black">Voltar</a></td>
</jsp:root>
Cristian Mietlicki
Curtir tópico
+ 0Posts
26/03/2009
Henrique Weissmann
você está quase lá. Vamos dar uma olhada neste seu código, ok?
<script type="text/javascript">
function adicionaParam(usuario,senha){
var parametro1 = document.getElementById(usuario);
var parametro2 = document.getElementById("11");
window.open.location ="../listas/listarestadocivil.jsp?parametro1=" + parametro1;
return true;
}
</script>
Pois bem, para passar os vários parâmetros, você só vai precisar de concatenar a sua string, como no exemplo abaixo:
<script type="text/javascript">
function adicionaParam(usuario,senha){
var parametro1 = document.getElementById(usuario);
var parametro2 = document.getElementById("11");
var parametro3 = documento.getElementById("parametro3")
window.open.location ="../listas/listarestadocivil.jsp?parametro1=" + parametro1 + "¶metro2=" + parametro2 + "¶metro3=" + parametro3
return true;
}
</script>
A sintaxe para se passar mais de um parâmetro é simples. A partir do segundo parâmetro, sempre inicie seu nome com o caractere & seguido do seu nome, como no exemplo abaixo:
http://algumaURL/?parametro1=valor1¶metro2=valor2¶metro3=valor3¶metro4=valorQueVoceQuiser
No entanto, cuidado: há um limite no número de caracteres que você pode enviar a partir de uma requisição do tipo GET. No caso, não é uma limitação do protocolo HTTP em si, mas sim dos próprios navegadores. Normalmente, este limite é de 255 caracteres.
Gostei + 0
26/03/2009
Cristian Mietlicki
<jsp:root version="1.2" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:display="urn:jsptld:http://displaytag.sf.net">
<jsp:directive.page contentType="text/html; charset=UTF8" />
<jsp:directive.page import="com.br.controle.*" />
<h2>Pessoas Cadastradas no Sistema</h2>
<script type="text/javascript" language="javascript">
function listaEstadoCivil(){
window.opener.location ="../listas/listarestadocivil.jsp?parametro=1" ;
}
</script>
<script type="text/javascript">
function adicionaParam(usuario,senha){
var parametro1 = document.getElementById(usuario);
var parametro2 = document.getElementById(senha);
window.open.location ="../listas/listarestadocivil.jsp?parametro1=" + parametro1 + "¶metro2=" + parametro2;
return true;
}
</script>
<head>
<link rel="stylesheet" href="../../css/cruzeiro.css" type="text/css" />
</head>
<jsp:scriptlet>
ControleLogin controleLogin = new ControleLogin();
request.setAttribute( "colecao", controleLogin.getTodosUsuarios());
</jsp:scriptlet>
<display:table name="colecao" export="true" class="table" style="width:80%; text-align:center;">
<display:setProperty name="export.pdf" value="true" />
<display:column property="usuario" style="font-size: 12pt;" href="javascript:adicionaParam('${colecao.usuario1}','${colecao.grupo)');"/>
<display:column property="grupo" style="font-size: 10pt; " />
<display:column property="senha" paramId="senha" style="font-size: 10pt;"/>
</display:table>
<td height="50"><a target="iframe" href="/CruzeirodoSul/pages/cadastros/cadastrarusuario.jsp" style="color: black">Voltar</a></td>
</jsp:root>
Gostei + 0
26/03/2009
Henrique Weissmann
function adicionaParam(usuario,senha){
var parametro1 = document.getElementById(usuario);
var parametro2 = document.getElementById(senha);
window.open.location ="../listas/listarestadocivil.jsp?parametro1=" + parametro1 + "¶metro2=" + parametro2;
return true;
}
</script>
Dicas para resolver o problema:
1. Armazena a URL em uma variável e a exponha de algum modo a você quando estiver processando a página.
Algo como
<script type="text/javascript">
var parametro1 = document.getElementById(usuario);
var parametro2 = document.getElementById(senha);
var url ="../listas/listarestadocivil.jsp?parametro1=" + parametro1 + "¶metro2=" + parametro2;
alert(url)
</script>
Assim você poderá verificar qual a URL que está passando para o navegador. As vezes, pode ser que o valor de parametro1 ou 2 esteja em branco. Neste caso, é possível que você precise fazer algum tratamento.
2. Apenas por curiosidade, tente montar a sua URL com algo como
<script type="text/javascript">
var parametro1 = document.getElementById(usuario);
var parametro2 = document.getElementById(senha);
var url ="../listas/listarestadocivil.jsp?parametro1=" + parametro1 + "¶metro2=" + parametro2 + ";"
</script>
Dica: em Javascript, o ; é opcional.
Gostei + 0
26/03/2009
Cristian Mietlicki
/pages/consultas/consultarusuario.jsp(18,107) The reference to entity "parametro2" must end with the ';' delimiter.
Minha jsp:
<jsp:root version="1.2" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:display="urn:jsptld:http://displaytag.sf.net">
<jsp:directive.page contentType="text/html; charset=UTF8" />
<jsp:directive.page import="com.br.controle.*" />
<h2>Pessoas Cadastradas no Sistema</h2>
<script type="text/javascript" language="javascript">
function listaEstadoCivil(){
window.opener.location ="../listas/listarestadocivil.jsp?parametro=1" ;
}
</script>
<script type="text/javascript">
function adicionaParam(usuario,senha){
var parametro1 = document.getElementById(usuario);
var parametro2 = document.getElementById(senha);
//window.open.location ="../listas/listarestadocivil.jsp?parametro1=" + parametro1 + "¶metro2=" + parametro2 + ";"
var url ="../listas/listarestadocivil.jsp?parametro1=" + parametro1 + "¶metro2=" + parametro2 + ";"
alert(url);
return true;
}
</script>
<head>
<link rel="stylesheet" href="../../css/cruzeiro.css" type="text/css" />
</head>
<jsp:scriptlet>
ControleLogin controleLogin = new ControleLogin();
request.setAttribute( "colecao", controleLogin.getTodosUsuarios());
</jsp:scriptlet>
<display:table name="colecao" export="true" class="table" style="width:80%; text-align:center;">
<display:setProperty name="export.pdf" value="true" />
<display:column property="usuario" style="font-size: 12pt;" href="javascript:adicionaParam('${colecao.usuario1}','${colecao.grupo)');"/>
<display:column property="grupo" style="font-size: 10pt; " />
<display:column property="senha" paramId="senha" style="font-size: 10pt;"/>
</display:table>
<td height="50"><a target="iframe" href="/CruzeirodoSul/pages/cadastros/cadastrarusuario.jsp" style="color: black">Voltar</a></td>
</jsp:root>
Gostei + 0
26/03/2009
Henrique Weissmann
Digo: é uma mensagem gerada pelo seu servidor de aplicações ou uma das mensagens padrão do navegador?
Gostei + 0
26/03/2009
Cristian Mietlicki
Apache Tomcat/6.0.18 - Error reportexception org.apache.jasper.JasperException: /pages/consultas/consultarusuario.jsp(18,107) The reference to entity "parametro2" must end with the ';' delimiter. 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.JspDocumentParser.parse(JspDocumentParser.java:214) org.apache.jasper.compiler.ParserController.doParse(ParserController.java:200) 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) note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.
Gostei + 0
26/03/2009
Henrique Weissmann
Neste caso, não se trata de um erro do seu JavaScript, mas sim na execução do relatório, ou seja, nos valores passados para o servlet.
Sendo assim, vamos lá:
a primeira coisa a se mudar é o seu JavaScript.
<script type="text/javascript">
function adicionaParam(usuario,senha){
var parametro1 = document.getElementById(usuario);
var parametro2 = document.getElementById(senha);
//window.open.location ="../listas/listarestadocivil.jsp?parametro1=" + parametro1 + "¶metro2=" + parametro2 + ";"
var url ="../listas/listarestadocivil.jsp?parametro1=" + parametro1 + "¶metro2=" + parametro2 + ";"
alert(url);
return true;
}
</script>
No caso, o problema ainda é a URL. Ao ser enviada para o tomcat, ele não a está compreendendo.
Neste caso, há ainda a seguinte alternativa. Utilize a seguinte sintaxe para montar a sua URL, tal como no código abaixo:
<script type="text/javascript">
function adicionaParam(usuario,senha){
var parametro1 = document.getElementById(usuario);
var parametro2 = document.getElementById(senha);
var url ="../listas/listarestadocivil.jsp?parametro1=" + parametro1 + ";¶metro2=" + parametro2 + ";"
}
</script>
Ou seja, antes do caractere &, insira o caractere ;
Se não me engano, o último ; é opcional.
Gostei + 0
26/03/2009
Cristian Mietlicki
<jsp:root version="1.2" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:display="urn:jsptld:http://displaytag.sf.net">
<jsp:directive.page contentType="text/html; charset=UTF8" />
<jsp:directive.page import="com.br.controle.*" />
<h2>Pessoas Cadastradas no Sistema</h2>
<script type="text/javascript" language="javascript">
function listaEstadoCivil(){
window.opener.location ="../listas/listarestadocivil.jsp?parametro=1" ;
}
</script>
<script type="text/javascript">
function adicionaParam(usuario,senha){
var parametro1 = document.getElementById(usuario);
var parametro2 = document.getElementById(senha);
var url ="../listas/listarestadocivil.jsp?parametro1=" + parametro1 + ";¶metro2=" + parametro2 + ";"
}
</script>
<head>
<link rel="stylesheet" href="../../css/cruzeiro.css" type="text/css" />
</head>
<jsp:scriptlet>
ControleLogin controleLogin = new ControleLogin();
request.setAttribute( "colecao", controleLogin.getTodosUsuarios());
</jsp:scriptlet>
<display:table name="colecao" export="true" class="table" style="width:80%; text-align:center;">
<display:setProperty name="export.pdf" value="true" />
<display:column property="usuario" style="font-size: 12pt;" href="javascript:adicionaParam('${colecao.usuario1}','${colecao.grupo)');"/>
<display:column property="grupo" style="font-size: 10pt; " />
<display:column property="senha" paramId="senha" style="font-size: 10pt;"/>
</display:table>
<td height="50"><a target="iframe" href="/CruzeirodoSul/pages/cadastros/cadastrarusuario.jsp" style="color: black">Voltar</a></td>
</jsp:root>
Gostei + 0
26/03/2009
Henrique Weissmann
fiz algumas pesquisas e descobri algumas possíveis causas para o seu problema. Vamos lá:
ao que tudo indica, não é um problema nem do Tomcat nem do JavaScript, mas sim do parseamento de um documento XML. No caso, todo o problema envolve o caractere '&'.
Na notação XML, o caractere & é utilizado para definir entidades, e necessáriamente deve ser finalizado com o caractere ;. Entidades podem ter diversas utilidades, mas a mais comum consiste na definição de caracteres especiais, como por exemplo maior que, que é >
Toda entidade possui a seguinte sintaxe:
&[nome da entidade];
No caso, o que está acontecendo: o caractere & está sendo passado para seu servlet como um valor e o parser XML (que irá gerar o Servlet a partir do JSP), ao ler o documento e o encontrar, começa a buscar pelo final da entidade e não encontra o caractere ; no final.
Como consequencia, aparece a mensagem "(...) muset end with the ';' delimiter';.
A solução para este problema consiste em verificar os valores dos seus atributos. Será que no conteúdo de um deles não há um caractere &? Neste caso, a solução é inclusive fácil: basta substituir o caractere & por &
& equivale a entidade que representa o caractere &. No caso, isto solucionaria o problema.
Esta substituição pode ser feita no javascript que monta a sua URL.
No entanto, é importante lembrar aqui que o jasper que aparece na sua mensagem de erro não é o Jasper Report, mas sim o compilador de JSP do próprio container Tomcat. Sendo assim, o problema não é no Jasper Reports (com base nas informações passadas), mas sim nos valores passados para a URL.
Outra possibilidade: ao trabalhar com scriptlets dentro do JSP, sempre finalize cada uma das linhas de comando com um caractere ;. O Tomcat irá apontar um erro com esta mesma mensagem caso isto não seja feito.
Outra dica: verifique se a página que você está gerando está bem formada, como se fosse um documento XML. Isto ajuda muito a detectar problemas no JSP.
Gostei + 0
26/03/2009
Cristian Mietlicki
/pages/consultas/consultarusuario.jsp(34,141) "javascript:adicionaParam('${colecao.usuario1}','${colecao.grupo)');" contains invalid expression(s): javax.el.ELException: Error Parsing: javascript:adicionaParam('${colecao.usuario1}','${colecao.grupo)');
Minha JSP:
<jsp:root version="1.2" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:display="urn:jsptld:http://displaytag.sf.net">
<jsp:directive.page contentType="text/html; charset=UTF8" />
<jsp:directive.page import="com.br.controle.*" />
<h2>Pessoas Cadastradas no Sistema</h2>
<script type="text/javascript" language="javascript">
function listaEstadoCivil(){
window.opener.location ="../listas/listarestadocivil.jsp?parametro=1" ;
}
</script>
<script type="text/javascript">
function adicionaParam(usuario,senha){
var parametro1 = document.getElementById(usuario);
var parametro2 = document.getElementById(senha);
var url ="../listas/listarestadocivil.jsp?parametro1=" + parametro1 + ";&parametro2=" + parametro2 + ";"
}
</script>
<head>
<link rel="stylesheet" href="../../css/cruzeiro.css" type="text/css" />
</head>
<jsp:scriptlet>
ControleLogin controleLogin = new ControleLogin();
request.setAttribute( "colecao", controleLogin.getTodosUsuarios());
</jsp:scriptlet>
<display:table name="colecao" export="true" class="table" style="width:80%; text-align:center;">
<display:setProperty name="export.pdf" value="true" />
<display:column property="usuario" style="font-size: 12pt;" href="javascript:adicionaParam('${colecao.usuario1}','${colecao.grupo)');"/>
<display:column property="grupo" style="font-size: 10pt; " />
<display:column property="senha" paramId="senha" style="font-size: 10pt;"/>
</display:table>
<td height="50"><a target="iframe" href="/CruzeirodoSul/pages/cadastros/cadastrarusuario.jsp" style="color: black">Voltar</a></td>
</jsp:root>
Gostei + 0
26/03/2009
Henrique Weissmann
O problema está em parte neste seu JavaScript:
<script type="text/javascript">
function adicionaParam(usuario,senha){
var parametro1 = document.getElementById(usuario);
var parametro2 = document.getElementById(senha);
var url ="../listas/listarestadocivil.jsp?parametro1=" + parametro1 + ";&parametro2=" + parametro2 + ";"
}
</script>
O caractere & deve ser incluido dentro dele para que sejam separados os parametros.
É dentro do valor dos parametros que & deve ser substituido por &
Como por exemplo na URL abaixo:
url="../listas/listarestadocivil.jsp?parametro1=coisas&coisas;¶metro2=qualquer coisa;
Repare: eu coloquei o & dentro do valor do parametro, mas o caractere & continua aparecendo, só que para separar os valores.
Gostei + 0
26/03/2009
Cristian Mietlicki
var url ="../listas/listarestadocivil.jsp?parametro1=parametro1&parametro2"
Gostei + 0
26/03/2009
Henrique Weissmann
parte do problema (se não todo) pelo menos está aqui.
Decompondo a URL, o Tomcat vai ter o seguinte:
parametro1=parametro1¶metro2
No caso, deveria ser algo como
url="../listas/listarestadocivil.jsp?parametro1=parametro1;¶metro2=algumvalor;
Lembre-se: & deve ser inserido como o valor de um dos parametros (caso esteja presente dentro do valor), não como o separador de atributos da URL.
Sendo assim, caso ocorra algum valor de parametro com o caractere &, deveria ficar como
url="../listas/listarestadocivil.jsp?parametro1=valor;¶metro2=c&a;
Gostei + 0
26/03/2009
Cristian Mietlicki
Gostei + 0
26/03/2009
Henrique Weissmann
var url ="../listas/listarestadocivil.jsp?parametro1=parametro1&parametro2"
Vou fazer aqui uma análise de como o Tomcat a irá interpretar, ok?
Vamos lá:
o JSP: listarestadocivil.jsp
parâmetros:
parametro1
Valor: parametro1¶metro2
a entidade & será convertida para o caractere '&'.
O que ocorre aqui Cristian: o caractere & deve ser substituido apenas quando estiver contido no valor de um dos parametros. Se você quer passar mais de um parâmetro, ele deverá ser digitado exatamente como se encontra (sem conversão). Isto porque se trata de um caractere especial. No caso, o caractere responsável por separar parametros dentro de uma URL.
Exemplo: suponhamos que você tenha dois parametros, respectivamente chamados de parametro1 e parametro2.
Se parametro1 você quer que seja passado o texto "coisas da vida" e, para o parametro2, você quer que seja passado o valor C&A, a sua URL deverá ser criada da seguinte maneira:
Passo 1: substituir o caractere problemático nos valores pelo seu valor de entidade.
No caso, o valor a ser passado para a URL para o parametro2 será transformado de C&A para C&A
Passo2: montando a URL separando os parametros.
A url será montada da seguinte maneira:
[nome do jsp]?(lista de parametros).
No seu caso, seria montada assim:
../listas/listarestadocivil.jsp?(aqui entrarão os parametros).
No caso dos parametros, eles sempre serão separados pelo caractere &. No entanto, convém mencionar que, no caso de haver mais de um parametro, os parametros anteriores ao último deverão ser finalizados com o caractere ';'.
Logo, montando a sua URL, seria algo como
../listas/listarestadocivil.jsp?parametro1=coisas da vida;¶metro2=C&A
Ainda da para melhorar um pouco mais isto: o caractere de espaço ' ' também pode ser substituido por outra entidade. No caso, a entidade que representa um espaço é
Sendo assim, melhorando ainda mais a sua URL, ela poderia ficar como
../listas/listarestadocivil.jsp?parametro1=coisas da vida;¶metro2=C&A
Quando o servidor receber esta URL, ele a irá transformar para o valor original (não cabe a você fazer esta transformação, é papel do servlet). Sendo assim,
parametro1 que foi recebido como "coisas da vida" virará "coisas da vida" e
parametro2 que foi recebido como "C&A" será convertido para C&A.
O algoritmo basico portanto é o seguinte:
1. Para cada valor de parametro, substituir os caracteres problemáticos para as suas respectivas entidades
(no caso, espaço vira e '&' vira &)
2. Montar a URL seguindo a regra
[endereço]?(lista de parametros), aonde (lista de parametros) deve possuir o formato
[nome do parametro1]=(valor já transformado);&[nome do parametro2]=(valor já transformado)
Para uma lista das entidades HTML, acesse este link: http://www.w3schools.com/HTML/html_entities.asp
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)