Boa tarde pessoal tudo blz? estou aqui tentando fazer um programinha para estudo e estou me deparando com um problema…
Estou usando Hibernate + Struts nesse meu estudo e tenho uma classe com composite-id assim:
public class Parceiro implements Serializable {
private ParceiroPK id;
private String nomeCompleto;
// meus metodos get, set, hashCode, equals
}
public class ParceiroPK implements Serializable {
private Long codigo;
private Empresa empresa;
// meus metodos get, set, hashCode, equals
}
public class Empresa implements Serializable {
private Long codigo;
// meus metodos get, set, hashCode, equals
}
Estou enviando uma lista de Parceiro para o JSP assim:
HttpSession session = request.getSession();
Collection listaParceiro = ParceiroDAO.getInstance().listaTodos();
session.setAttribute("listaParceiro", listaParceiro);
estou agora tentando pegar o objeto da pagina JSP só que nao consigo…
Parceiro parceiro = (Parceiro) ParceiroDAO.getInstance().procurar( (ParceiroPK) request.getAttribute("parceiroID") );
Só que ele está retornando como null alguém tem uma idéia de como posso fazer isso ?? o que devo estar errando… pois quando tento fazer um Load com o ID ele me da o seguinte erro:
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: id to load is required for loading
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:516)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:423)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause
java.lang.IllegalArgumentException: id to load is required for loading
org.hibernate.event.LoadEvent.<init>(LoadEvent.java:51)
org.hibernate.event.LoadEvent.<init>(LoadEvent.java:33)
org.hibernate.impl.SessionImpl.load(SessionImpl.java:564)
org.hibernate.impl.SessionImpl.load(SessionImpl.java:560)
br.com.fts.dao.ParceiroDAO.procurar(ParceiroDAO.java:35)
br.com.fts.action.ParceiroAction.edita(ParceiroAction.java:38)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:276)
org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:196)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.
--------------------------------------------------------------------------------
Apache Tomcat/5.0.28
nao seria pq vc está colocando o atributo na sessão
[quote=smorigo]HttpSession session = request.getSession();
Collection listaParceiro = ParceiroDAO.getInstance().listaTodos();
session.setAttribute(“listaParceiro”, listaParceiro);
[/quote]
e está tentando pegar no requset?
[quote=smorigo] Parceiro parceiro = (Parceiro) ParceiroDAO.getInstance().procurar( (ParceiroPK) request.getAttribute(“parceiroID”) );
[/quote]
mude request, por session (ou vice-versa) que deve funcionar
(e não eskeça de colocar o memso nome, pois vc ta tentando pegar um atributo diferente do que colocou, pois vc colocou listaParceiro e está tentando pegar parceiroID)
soh lembrando que vc adiciounou uma Collection, então deve pegar uma Collection
verdade ja alterei para request! 
Nao tem como eu pegar somente o item que foi selecionado ?
Vc ta executando esse codigo no jsp?
não seria mais facil vc passar pro jsp somente o que tem que ser mostrado, tudo mastigadinho jah?
não sei do que trata seu problema, mas vc pode tratar esses dados (pegar a Collection, recuperar o item que vc quer, etc) usando servlets, e então enviar pro jsp somente o que vc quer mostrar…
nao entendi…vc passa uma Collection, mas soh vai usar um item da Collection?
te mais
Essa colection eu to mandando para a pagina é pra formar uma lista de todos os parceiros… dai tendo todos na pagina clico no que eu quero exibir os dados no formulario 
Eu queria pegar o “Parceiro” que o usuario clico la na pagina mais eu so to conseguindo receber o Collection mesmo nao sei como identificar o selecionado…
Uma coisa q eu tinha imaginado é de pegar o atributo listaParceiro.Id que é composto pelas duas colunas da minha tabela e dai pesquisar quem é o Parceiro…
o usuario entra na pagina e clica no botão “mostra parceiros” aí pega essa Collection e mostra a lista dos parceiros? e depois ele escolhe um parceiro especifico, daí vc mostra os dados do danado?
se não entendi mal, vc quer armazenar a lista de parceiros e os dados de todos da lista tbm neh?
vc nao pode fazer algo do tipo:quando ele pede pra mostrar os parceiros vc mostra a lista de parceiros, daí quando ele escolhe um parceiro vc vai procurar esse parceiro (outra requisição) e depois mostra o que ele quer?
té mais
Bom dia Rodrigo tudo blz? isso que vc descreveu é exatamente o que eu estou tentando fazer sim…
Eu estava imaginando que iria conseguir trabalhar com algo semelhante ao request.getParameter(“codigo”); que usei em um outro exemplo que eu fiz mais nao funciona né…
Quando estou clicando em uma das “linhas” lá da minha Collection estou passando ao meu Action mais nele nao consigo pegar o bendito parceiro clicado…
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<link href="/fts/paginas/css/estilo_v1.css" type="text/css" rel="stylesheet">
<head>
<title></title>
</head>
<body>
<table width="550" border="0" cellspacing="0" cellpadding="0" >
<tr>
<td width="50">ID</td>
<td width="250">Nome Completo</td>
<td width="250">Nome Reduzido</td>
</tr>
<c:forEach var="parceiro" items="${listaParceiro}">
<tr>
<td>
<c:url var="minhaURL" value="Parceiro.do">
<c:param name="metodo" value="edita"/>
<c:param name="parceiroID" value="${parceiro.id}"/>
</c:url>
<a href='<c:out value="${minhaURL}"/>'>Editar</a>
</td>
<td><c:out value="${parceiro.nomeCompleto}"/></td>
<td><c:out value="${parceiro.nomeReduzido}"/></td>
</tr>
</c:forEach>
</table>
</body>
</html>
que erro que dá quando vc tenta pegar o parametro? request.getParameter(“parceiroID”);
Então se eu pego o parametro usando isso aqui:
request.getParameter(“parceiroID”);
Ele me traz uma String e nao consigo usar ela para pesquisar, eu imaginei que teria uma forma de eu pegar o objeto lá da linha X selecionada e passar pro metodo que vai fazer a busca daquele registro…mais pelo que to vendo nao tem como né…
vc nao tem nenhum metodo do tipo Parceiro getParceiroById(String id)?
Hum olha oq eu estou fazendo mais to achando muito feio…
- Criei um metodo na minha classe Parceiro que faz o seguinte:
public String getChaveComposta() {
return id.getEmpresa().getCodigo()+"@"+id.getCodigo();
}
- Dai to pensando em pegar isso como parametro mesmo lá no meu Servlet e realizar a pesquisa…
Mais é muito feio…