Error com pagina de detalhes usando displaytag

7 respostas
I

Boa tarde amigos,

Tenho uma pagina que lista alguns registros de fornecedor resuldato de uma busca. Estou usando displaytag para montar a tabela com os registros, paginação e etc. O problema está quando clico no nome de um fornecedor, que vai para a pagina de detalhes, onde o nome do fornecedor é um link com o nome da action e o id do fornecedor, não consigo encaminhar o id para o metodo da minha action.

struts-config:

<action path="/detalhesFornecedor" 
				type="br.com.sce.controller.action.fornecedor.FornecedorAction" 
				name="fornecedorForm"
				parameter="method"  
				input="/jsp/fornecedor/listarFornecedor.jsp" 
				scope="request" 
				validate="true">
				
			<forward name="fwd-sucesso" path="/jsp/fornecedor/detalhesFornecedor.jsp"/>
			<forward name="fwd-sucesso_alterar_fornecedor" path="/jsp/fornecedor/alterarFornecedor.jsp"/>
</action>

listarFornecedor.jsp:

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://displaytag.sf.net" prefix="display" %>
<html>
<head>
<%@ include file="../../css/estilos.css"%>
<%@ include file="../../css/displaytag.css"%>
<%@ page import="br.com.sce.resources.ConstantsUtil" session="true"%>
</head>
<body>
<div align="left" class="titulo_pagina"><bean:message key="label.tituloPaginaListaFornecedor"/></div>	
	<br>
	<br>
	<br>
	<html:hidden property="method" value="detalhesFornecedor"/>
		<div align="center">
			<display:table pagesize="10" name="lFornecedor" id="lFornecedor" scope="session" class="table" requestURI="listarFornecedor.do" styleClass="texto1" align="center" export="true">
					<td class="even">
						<display:column property="nomeFantasia" title="Nome Fantasia" styleClass="texto1" sortable="true" headerClass="sortable" href="detalhesFornecedor.do" paramId="id" paramProperty="id"/>
					</td>
					<td class="odd">
						<display:column property="razaoSocial" title="Razão Social" styleClass="texto1"/>
					</td>
					<td class="even">
						<display:column property="cnpj" title="CNPJ" styleClass="texto1" />
					</td>
					<td class="odd">
						<display:column property="contato.nuTel" title="Telefone" styleClass="texto1" />
					</td>
					<td class="even">
						<display:column title="Alterar" href="detalhesFornecedor.do" paramId="id" paramProperty="id" media="html"><div align="center"><img src=<%=ConstantsUtil.IMG_ALTERAR%> alt="Alterar" border="0" /></div></display:column>
					</td>
					<td class="odd">
						<display:table/>
					</td>
						<display:setProperty name="export.pdf" value="true" />
						<display:setProperty name="export.csv" value="false" />
						<display:setProperty name="export.xml" value="false" />
			</display:table>
		</div>
		<br>
		<br>
		<center>
			<html:button property="opcao" onclick="javascript:history.back();" value="VOLTAR" styleClass="botao"/>	
		</center>
</body>
</html>

ERROR quando clico no nome do fornecedor:

javax.servlet.ServletException: Request[/detalhesFornecedor] does not contain handler parameter named 'detalhesFornecedor'.  This may be caused by whitespace in the label text.
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause 

javax.servlet.ServletException: Request[/detalhesFornecedor] does not contain handler parameter named 'detalhesFornecedor'.  This may be caused by whitespace in the label text.
	org.apache.struts.actions.DispatchAction.unspecified(DispatchAction.java:197)
	org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:245)
	org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
	org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
	org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
	org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
	org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

7 Respostas

I

Não estou conseguindo passar o noma do parametro. Estou usando assim no display:column

href="detalhesFornecedor.do?method=detalhesFornecedor" paramId="id" paramProperty="id"

Vlw…

apfmiranda

Você quer criar um link para as informações ou exibi-las na tabela criada pelo display tag?

para primeira opção supondo que o link seria “detalhesFornecedor.do?method=detalhesFornecedor”, vc teria que mudar o seguinte:

<display:column property="nomeFantasia" title="Nome Fantasia" value="texto do link" styleClass="texto1" sortable="true" headerClass="sortable" href="detalhesFornecedor.do" paramId="method" paramProperty="detalhesFornecedor"/>

lembrando que a propriedade detalhesFornecedor tem que existir em lFornecedor, pois esse será o valor adicionado ao link.

Se for a segunda opção então:
bastaria ter a propridade detalhesFornecedor

espero ter ajudado.

abraço.

I

Amigo apfmiranda, fiz da forma q vc postou, mas não consigo passar o id do fornecedor… Como poderia passar?

Vlw…

apfmiranda

O displaytag pega tua lista da propriedade “name” e para acessar os objetos dessa lista vc tem a propriedade “id”, então se sua displaytag está assim:

<display:table pagesize="10" name="Fornecedores" id="fornecedor" scope="session" class="table" requestURI="listarFornecedor.do" styleClass="texto1" align="center" export="true">

vc pode acessar a propriedade "razaoSocial"assim:

<display:column property="razaoSocial" title="Razão Social" styleClass="texto1"/>

ou utilizando jstl:

<display:column property="${fornecedor.razaoSocial}" title="Razão Social" styleClass="texto1"/>

ficam as duas opções então:

... href="detalhesFornecedor.do" paramId="method" paramProperty="id"...

ou

... href="detalhesFornecedor.do" paramId="method" paramProperty="${fornecedor.id}"...
I

Amigo apfmiranda, estou usando desta forma:

<display:column property="nomeFantasia" title="Nome Fantasia" styleClass="texto1" sortable="true" headerClass="sortable" href="detalhesFornecedor.do" paramId="method" paramProperty="id"/>

Mas quando passo o ponteiro do mouse por cima do nome do fornecedor na coluna “Nome Fantasia”, o link que é montado, q aparece na barra de status do navegador, é da seguinte forma:

http://localhost:8080/sce/detalhesFornecedor.do?method=23(id)

Queria passar algo tipo assim:

http://localhost:8080/sce/detalhesFornecedor.do?method=detalhesFornecedor?id=23

Como poderia fazer?

Tem uma propriedade da displaytag que é a sortProperty, o que faz esta propriedade?

Vlw…

apfmiranda

Acho que a Url correta seria está então::

http://localhost:8080/sce/detalhesFornecedor.do?id=23&method=detalhesFornecedor

para isso basta utilizar desta forma:

<display:column property="nomeFantasia" title="Nome Fantasia" styleClass="texto1" sortable="true" headerClass="sortable" href="detalhesFornecedor.do?method=detalhesFornecedor" paramId="id" paramProperty="id"/>
I

Blz amigo apfmiranda, funfou certinho…

Vlw mesmo…

Obrigado…

Grande Abraço!

Criado 30 de novembro de 2008
Ultima resposta 1 de dez. de 2008
Respostas 7
Participantes 2