Paginação causando erro bizarro - Displaytag

15 respostas
felipeguerra

Bom dia Pessoal,

Gostaria de saber se a seguinte situação já ocorreu com vocês!

Na minha página JSP estou usando a velha displaytag para paginar, normalmente.
Nessa página, ao mudar um determinado combo a página é submitada e usando o botão submit, obviamente, também.
Pois bem, só que eu tenho uma possível navegação:

1 - Ao escolher o relatório no menu, a Action executa os procedimentos para que em seguida a JSP seja apresentada;

2 - Em seguida, eu escolho num combo de ‘Clientes’, um em específico, ao selecioná-lo, a página é submitada para que seja carregado seus dados correspondentes. Acontece que, para esse cliente, o número de registros excede o máximo por página configurado na displaytag, e é aí que surge a parte bizarra. Existem n objetos na página que eu posso resgatar seus valores através do request.getParameter("nome_do_objeto") ou do request.getParameterValues("nome_do_objeto") se for o caso, só que, independente do objeto, está sendo criado um ‘array’ para ele, isto é, se eu tenho um campo hidden na minha página e após a paginação by displaytag, na minha Action se eu fizer:

request.getParameterValues("nome_do_hidden") vou ter vários valores para esse campo, e o pior, quando eu examino meu objeto HttpServletRequest está sendo armazenado todos os valores que foram submitados na página JSP;

Alguém já viu algo parecido?

Abraço

15 Respostas

M

Felipe, li tudo que vc escreveu e não entendi nada !!! rsrsrsrs

Qual é o erro que ocorre ?? o erro ocorre quando vc clica no número da página a ser carregada ?? …

felipeguerra

Vamos à prática então:

JSP:

<%@ page session="true" contentType="text/html; charset=ISO-8859-1" %>
<html>
<head>
<script type="text/javascript">
			function getCodAutBank(option) {
			 	var a_value = option.split(',');
			 	document.forms[0].ident_cliente.value=a_value[0];
				document.forms[0].consulta.value=a_value[1];
				document.forms[0].cpfCnpj.value=a_value[2];
				document.forms[0].cliente.value=a_value[3];
				document.forms[0].action.value = "/slEsperaServlet/salaEspera/link";		
			 	submitar();
			 	
			 }
</head>
<body>
	<form name="salaAnalise" action="" method="POST">
		<input type="hidden" name="action" value="" >
		<input type="hidden" name="ident_cliente" value="" >
		<input type="hidden" name="consulta" value="" >
		<input type="hidden" name="cliente" value="">
							<c:if test="${not empty clientes}">
								&nbsp;&nbsp;<a  ><b>Cliente</b></a>&nbsp;
								&lt;select name="nomeCliente" id="nomeCliente" style="width: 300px" onchange="getCodAutBank(this.value);"&gt;
									&lt;c:forEach var="cliente" items="${clientes}"&gt;
										&lt;c:choose&gt;
											&lt;c:when test='${cliente.nome eq requestScope.nomeCliente}' &gt;
												&lt;option value="&lt;c:out value='${cliente.identCliente}' /&gt;,&lt;c:out value='${cliente.codigoCliente}' /&gt;,&lt;c:out value='${cliente.cnpjCpf}' /&gt;,&lt;c:out value='${cliente.nome}' /&gt;" selected="selected"&gt;
											&lt;/c:when&gt;
											&lt;c:otherwise&gt;
												&lt;option value="&lt;c:out value='${cliente.identCliente}' /&gt;,&lt;c:out value='${cliente.codigoCliente}' /&gt;,&lt;c:out value='${cliente.cnpjCpf}' /&gt;,&lt;c:out value='${cliente.nome}' /&gt;"&gt;
											&lt;/c:otherwise&gt;
										&lt;/c:choose&gt;
											&lt;c:out value='${cliente.nome}' /&gt;
										&lt;/option&gt;
									&lt;/c:forEach&gt;
								&lt;/select&gt;
							&lt;/c:if&gt;
       &lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;

Nesses campos do tipo hidden, eu ‘seto’ os valores necessários para executar minha Action corretamente.
E é nesse ponto que estou tendo problemas, não sei se vc conhece o funcionamento da displaytag (eu não), mas ela armazena umas variáveis do tipo d-4560-1, certo?!?!?
Então, e é aí que eu ACHO que ela está fazendo um ‘array’ dos meus campos hidden, quando jamais isso deveria ser feito…

Exemplificando, se eu fizer isso na minha Action:

request.getParameterValues("ident_cliente")

Retornará um String[], entendeu?

Só que, pense na primeira requisição (a que é escolida no menu, conforme citei acima), vou ter que fazer:

((String[])request.getParameterValues("ident_cliente")[0])

Não é normal, né?

rodrigo_corinthians

<%@ taglib uri="http://displaytag.sf.net/el" prefix="display" %> <display:table pagesize="${pageSize}" ... Onde ${pageSize} corresponde a quantidade dos objetos do cliente selecionado, era isso que queria??

felipeguerra

Não, vc não entendeu meu problema…

M

Seria algo como abaixo, usando ajaxtags, evitando ter que enviar a página inteira novamente ??

<%@taglib uri="http://displaytag.sf.net" 			prefix="display"%>
<%@taglib uri="http://ajaxtags.org/tags/ajax" 		prefix="ajax" 	%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" 	prefix="fmt"	%>

<table width="100%">
	<tr>
		<td width="95%" valign="top">
			<ajax:displayTag id="displayTagFrame" ajaxFlag="displayAjax">
			
				<display:table id="usuario" name="${grupoWorkflowUsuarios}" requestURI="grupoWorkflowUsuario.listaPorUsuario.logic"
				               class="displaytag"
					           sort="list" defaultsort="1"
					           excludedParams="ajax">
					<display:column property="grupoWorkflow.descricao"	titleKey="lbl_fluxo" sortable="true" headerClass="sortable" style="width: 35%;"/>
					<display:column titleKey="lbl_vistar"				style="width: 10%;"><fmt:message key="lbl_${usuario.permite_vistar 			== 1 ? 'sim' : 'nao'}"/>	</display:column>
					<display:column titleKey="lbl_aprovar"				style="width: 10%;"><fmt:message key="lbl_${usuario.permite_aprovar 		== 1 ? 'sim' : 'nao'}"/>	</display:column>
					<display:column titleKey="lbl_cancelar"				style="width: 10%;"><fmt:message key="lbl_${usuario.permite_cancelar 		== 1 ? 'sim' : 'nao'}"/>	</display:column>
					<display:column titleKey="lbl_redirecionar"			style="width: 10%;"><fmt:message key="lbl_${usuario.permite_redirecionar 	== 1 ? 'sim' : 'nao'}"/>	</display:column>
					<display:column titleKey="lbl_reiniciar"			style="width: 10%;"><fmt:message key="lbl_${usuario.permite_reiniciar 		== 1 ? 'sim' : 'nao'}"/>	</display:column>
					<display:column titleKey="lbl_recebe_redcto"		style="width: 15%;"><fmt:message key="lbl_${usuario.recebe_redirecionamento == 1 ? 'sim' : 'nao'}"/>	</display:column>
				</display:table>
				
			</ajax:displayTag>
		</td>
	</tr>
</table>
felipeguerra

marceloplis:
Seria algo como abaixo, usando ajaxtags, evitando ter que enviar a página inteira novamente ??

Cara,

Eu nunca usei e nem consigo usar esse framework, pois minha JVM é 1.4 e, pelo que eu li, a JVM 1.5 é pré-requisito!

Obs: Não tenho como mudar a JVM pois não estou na máquina de casa…é o trampo!!

felipeguerra

Para simplificar o que está acontecendo comigo, acrescento a seguinte informação:

Imaginem que eu tenho 1 objeto do tipo hidden na minha página, só que por um engano, dupliquei, ou seja:

&lt;html&gt;
&lt;head&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;table width='100%'&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;input type='hidden' name='teste' value='1'&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;input type='hidden' name='teste' value='2'&gt;
&lt;/body&gt;
&lt;/html&gt;

Na hora de resgatar o valor, eu recebo o ‘2’…aí eu fico confuso, e penso: “Ca$%&¨@, porque veio 2?”

E, ao examinar o código, percebo que tinha mais um objeto hidden com o mesmo nome!

Só que no meu caso, não fiz essa cagada…nem criei um objeto através do Javascript com o nome de algum existente e, conforme disse acima, só após a paginação da displaytag que isso ocorre.

Enfim…pensei num bug da displaytag, mas provavelmente é pretensão minha!

Valeu

felipeguerra

Nem uma ajuda?

felipeguerra

Mais uma informação:

Tenho colunas ordenáveis que apresentam parâmetros em duplicidade, por ex.: http://localhost:8080/MinhaAction.do?param=teste&param=teste&d-19490-s=10&param2=sheat&param2=sheat

A displaytag está louca?

Fiz uma cagada?

felipeguerra

Isso está um mistério…

felipeguerra

Alguém aqui sabe como funciona o mecanismo de paginação e ordenação da displaytag???

M

Cara, olhando seu código acima não consegui ver onde você está usando displaytag ?? na verdade vc está tentando criar uma não é ??

felipeguerra

marceloplis:

Cara, olhando seu código acima não consegui ver onde você está usando displaytag ?? na verdade vc está tentando criar uma não é ??

Se faz questão:

&lt;displaytag:table name="sessionScope.titulos" requestURI="/siri/SalaEsperaAction.do" excludedParams="senha" class="simple" id="line" export="false" style="width:100%;" defaultsort="0" defaultorder="descending" pagesize="25"&gt;
								&lt;!-- INI - paginação --&gt;
								&lt;displaytag:setProperty name="paging.banner.full" value="&lt;span id=\"url_anterior\" style=\"display:none;\"&gt;{2}&lt;/span&gt;&lt;span id=\"url_proxima\" style=\"display:none;\"&gt;{3}&lt;/span&gt;"/&gt;
								&lt;displaytag:setProperty name="paging.banner.first" value="&lt;span id=\"url_proxima\" style=\"display:none;\"&gt;{3}&lt;/span&gt;"/&gt;
								&lt;displaytag:setProperty name="paging.banner.last" value="&lt;span id=\"url_anterior\" style=\"display:none;\"&gt;{2}&lt;/span&gt;"/&gt;
								&lt;displaytag:setProperty name="paging.banner.onepage" value=""/&gt;
											
								&lt;displaytag:setProperty name="paging.banner.page.selected" value=""/&gt;
								&lt;displaytag:setProperty name="paging.banner.page.link" value="&lt;span id=\"ir_para\" style=\"display:none;\"&gt;{0}&lt;/span&gt;"/&gt;
								&lt;displaytag:setProperty name="paging.banner.page.separator" value=""/&gt;
				
								&lt;displaytag:setProperty name="paging.banner.no_items_found" value="&lt;span id=\"pagebanner\" style=\"display:none;\"&gt;Nenhum {0} encontrado&lt;/span&gt;&lt;span id=\"qtde_total\" style=\"display:none;\"&gt;0&lt;/span&gt;" /&gt;
								&lt;displaytag:setProperty name="paging.banner.one_item_found" value="&lt;span class=\"pagebanner\" style=\"display:none;\"&gt;Um {0} encontrado&lt;/span&gt;&lt;span id=\"qtde_total\" style=\"display:none;\"&gt;1&lt;/span&gt;" /&gt;
								&lt;displaytag:setProperty name="paging.banner.all_items_found" value="&lt;span class=\"pagebanner\" style=\"display:none;\"&gt;{0} {1} encontrados, exibindo todos os {2}&lt;/span&gt;&lt;span id=\"qtde_total\" style=\"display:none;\"&gt;{0}&lt;/span&gt;" /&gt;
								&lt;displaytag:setProperty name="paging.banner.some_items_found" value="&lt;span id=\"qtde_total\" style=\"display:none;\"&gt;{0}&lt;/span&gt;&lt;span id=\"exibindo_de\" style=\"display:none;\"&gt;{2}&lt;/span&gt;&lt;span id=\"exibindo_ate\" style=\"display:none;\"&gt;{3}&lt;/span&gt;" /&gt;
								&lt;!-- FIM - paginação --&gt;
								&lt;displaytag:column media="csv excel html" align="center" title="&lt;input type='checkbox' class='border-no' style='cursor:hand' title='Seleciona Todos' id='checkAll' name='checkAll' onclick='selectAllCheckBox(this.checked); valorTotal(this.checked);'&gt;" sortable="false"&gt;
									&lt;input type="hidden" name="vlrCheck" value="&lt;c:out value='${line.vlTitulo}' /&gt;"&gt;
									&lt;input type="checkbox" name="chkArquivo" id="chkArquivo" onclick="calculaVlrTitulo(this, &lt;c:out value='${line.vlTitulo}' /&gt;);" value="&lt;c:out value='${line.cdId}' /&gt;" class="border-no" style="cursor:hand"&gt;
								&lt;/displaytag:column&gt;
								&lt;displaytag:column media="csv excel html" title="Seu Número" sort="true"&gt;
									<a  ${line.noArquivo}" />', '&lt;c:out value="${line.seuNossoNumero}" /&gt;', '&lt;fmt:formatDate value="${line.dataEmissao}" pattern="dd/MM/yyyy" /&gt;', '&lt;fmt:formatDate value="${line.dataVcto}" pattern="dd/MM/yyyy" /&gt;', '&lt;fmt:formatNumber value="${line.vlTitulo}" pattern="###,###,###,###,##0.00" /&gt;', '&lt;c:out value="${line.noSacado}" /&gt;', '&lt;c:out value="${line.cgcCpfSacado}" /&gt;', '&lt;c:out value="${line.tipoSacado}" /&gt;', '&lt;c:out value="${line.cdStatus}" /&gt;', '&lt;c:out value="${line.dsErro}" /&gt;', '1', '&lt;c:out value="${line.nrDaOperacao}-${line.cdProduto}" /&gt;', '&lt;customTags:tIf test="${not empty line.cdNovoProdOperacao}" trueValue="${line.cdNovoProdOperacao}" falseValue=" " /&gt;', '&lt;c:out value="${line.dsEndSacado}" /&gt;', '&lt;c:out value="${line.dsBairroSacado}" /&gt;', '&lt;c:out value="${line.noCidadeSacado}" /&gt;', '&lt;c:out value="${line.nrCepSacado}" /&gt;', '&lt;c:out value="${line.dsUFSacado}" /&gt;')"&gt;
										&lt;c:out value="${line.seuNossoNumero}" /&gt;
									</a>
								&lt;/displaytag:column&gt;
								&lt;displaytag:column media="csv excel html" property="dataEmissao" title="Emissão" sort="true" decorator="br.com.sofisa.cau.view.helper.BaseDecorator" /&gt;
								&lt;displaytag:column media="csv excel html" property="dataVcto" title="Vencto." sort="true" decorator="br.com.sofisa.cau.view.helper.BaseDecorator" /&gt;
								&lt;displaytag:column media="csv excel html" property="vlTitulo" title="Valor" decorator="br.com.sofisa.cau.view.helper.BaseDecorator" /&gt;
								&lt;displaytag:column media="csv excel html" property="vlDesconto" title="Desc." decorator="br.com.sofisa.cau.view.helper.BaseDecorator" /&gt;
								&lt;displaytag:column media="csv excel html" property="vlAbatimento" title="Abat." decorator="br.com.sofisa.cau.view.helper.BaseDecorator" /&gt;
								&lt;displaytag:column media="csv excel html" property="diasProtesto" title="Prot. d.c." titleKey="Dias corridos para protesto" /&gt;
								&lt;displaytag:column media="csv excel html" title="Sacado" sort="true" width="15%"&gt;
									<font  >
										&lt;c:out value="${line.noSacado}" /&gt;
									</font>
								&lt;/displaytag:column&gt;
								&lt;displaytag:column media="csv excel html" title="%Liq Bco" align="center"&gt;
									&lt;c:choose&gt;
										&lt;c:when test='${line.nrLiquidezSacBco &gt;= 0}'&gt;
											&lt;fmt:formatNumber value='${line.nrLiquidezSacBco}' maxFractionDigits='0' /&gt;
										&lt;/c:when&gt;
										&lt;c:otherwise&gt;
											<b>---</b>
										&lt;/c:otherwise&gt;
									&lt;/c:choose&gt;
								&lt;/displaytag:column&gt;
								&lt;displaytag:column media="csv excel html" title="%Liq Ced" align="center"&gt;
									&lt;c:choose&gt;
										&lt;c:when test='${line.nrLiquidezSacDif &gt;= 0}'&gt;
											&lt;fmt:formatNumber value='${line.nrLiquidezSacDif}' maxFractionDigits='0' /&gt;
										&lt;/c:when&gt;
										&lt;c:otherwise&gt;
											<b>---</b>
										&lt;/c:otherwise&gt;
									&lt;/c:choose&gt;								
								&lt;/displaytag:column&gt;
								&lt;c:set var="pcExcConcentr"&gt;
									&lt;fmt:formatNumber value='${line.pcExcessoConcentracao}' pattern='###,###,###,###,##0.00' /&gt;
								&lt;/c:set&gt;
								&lt;displaytag:column media="csv excel html" title="%Con" align="center"&gt;
									&lt;c:choose&gt;
										&lt;c:when test="${not empty pcExcConcentr}"&gt;
											&lt;c:out value='${pcExcConcentr}' /&gt;
										&lt;/c:when&gt;
										&lt;c:otherwise&gt;
											<b>---</b>
										&lt;/c:otherwise&gt;
									&lt;/c:choose&gt;
								&lt;/displaytag:column&gt;
								&lt;displaytag:column media="csv excel html" title="Ocorrência" width="18%"&gt;
									&lt;script&gt;javascript:document.write(getErro("&lt;c:out value='${line.dsErro}' /&gt;"))&lt;/script&gt;							
								&lt;/displaytag:column&gt;
								&lt;c:set var="fonte"&gt;
									&lt;c:choose&gt;
										&lt;c:when test="${not empty line.cdNovoProdOperacao}"&gt;
											&lt;c:set var="carteira" value="${line.cdNovoProdOperacao}" /&gt;
											&lt;c:set var="titulo" value="A carteira original(${line.nrDaOperacao}-${line.cdProduto}) foi mudada para..."/&gt;
											font-verm
										&lt;/c:when&gt;
										&lt;c:otherwise&gt;
											&lt;c:set var="carteira" value="${line.nrDaOperacao}-${line.cdProduto}" /&gt;
											&lt;c:set var="titulo" value="${line.cdProduto}"/&gt;
											font-normal
										&lt;/c:otherwise&gt;
									&lt;/c:choose&gt;
								&lt;/c:set&gt;
								&lt;displaytag:column media="csv excel html" title="Carteira"&gt;
									<font   >
										&lt;script&gt;javascript:document.write(acronimoCarteira('&lt;c:out value="${carteira}" /&gt;'))&lt;/script&gt;
									</font>
								&lt;/displaytag:column&gt;
							&lt;/displaytag:table&gt;
felipeguerra

Daqui a pouco vou ter que pagar R$ 70,00/hora para o cara que entender e resolver esse problema!!!

felipeguerra

Como ninguém aqui me ajudou, me virei!

Valeu

Criado 24 de outubro de 2007
Ultima resposta 31 de out. de 2007
Respostas 15
Participantes 3