[RESOLVIDO] Passar Objeto de uma Lista para o Controller

Olá, me desculpem se dúvida já foi respondida em algum outro tópico, mais as soluções que encontrei não consegui implementar.

Então, vamos ao problema.

Tenho uma .jsp onde recebo uma List

<c:forEach items="${transferenciaList}" var="item" varStatus="s">
	<input type="hidden" name="transferencia[${s.index }]" value="${item}"/>
		<tr>
			<td>${item.pedi01.pedido}</td>
			<td><fmt:formatDate pattern="dd/MM/yyyy" value="${item.pedi01.data }"/> </td>
			<td>${item.pedi01.loja }</td>	
			<td>
				<a href="<c:url value="/transferencias/listarProdutosTransferencia/${item}"/>">Confirmar</a>
			</td>
			
		</tr>
	</c:forEach>

até ai tudo bem, chegando tudo normalzinho, só que preciso passar uma transferencia para o TransferenciaController, mais não consigo aparece um NullPointerException, segue meu controller:

[code]@Get("/transferencias/listarProdutosTransferencia/{transferencia}")
public void listarProdutosTransferencia(Transferencia transferencia){
dao.confirmaTransferencia(transferencia);

}

[/code]

Obrigado pela atenção!!!

Você vai precisar fazer um converter para Transferência.

Nesse converter, você pode receber o DAO de Transferência e na url você manda só o ID…

Ai você vai receber o ID e vai retornar uma transferência.

Deixe-me ver se entendi,

no meu .jsp:

<a href="<c:url value="/transferencias/listarProdutosTransferencia/${item.id}"/>">Confirmar</a> 

No meu controller:

@Get("/transferencias/listarProdutosTransferencia")  
    public void listarProdutosTransferencia(int id){  
       Transferencia t = dao.listById(id);
       dao.confirmaTransferencia(t);
    } 

Seria +ou- assim?

Na verdade isso ai fica zoado né… Toda vez você vai precisar converter de int para Transferência…
De uma lida aqui:
http://vraptor.caelum.com.br/pt/docs/conversores/

A ideia é que você faça algo mais ou menos assim:

[code]@RequestScoped
@Convert(Transferencia.class)
public class TransferenciaConverter implements Converter<Transferencia> {

private final Logger logger = LoggerFactory.getLogger(this.getClass());
private TransferenciaDAO dao;

public TransferenciaConverter(TransferenciaDAO dao){
    this.dao = dao;
}

public Transferencia convert(String value, Class&lt;? extends Long&gt; type, ResourceBundle bundle) {
    if (value == null || value.equals(&quot;&quot;)) {
        return null;
    }
    try {
        return this.dao.get(Integer.parseInt(value));
    } catch (NumberFormatException e) {
        this.logger.error(&quot;Cannot convert to Transferencia.&quot;, e);
        return null;
    }
}

}
[/code]

Ai você vai passar a url desse jeito mesmo (usando o ${item.id})
Só que na hora de receber no seu controller, você já vai receber uma instância de Transferência:

@Get(&quot;/transferencias/listarProdutosTransferencia&quot;)    
    public void listarProdutosTransferencia(Transferencia obj){
       dao.confirmaTransferencia(obj);  
    } 

O que acontece é o seguinte: O VRaptor vai ver que ele precisa de uma Transferencia e vai procurar um converter para Transferencia.

Rafael, antes de mais nada quero agradecer sua atenção.

Minha classe Transferencia não é um entidade, ela é mais ou menos assim:

public class Transferencia{
      private Pedido pedido;
      private Movimentacao movimentacao;

       //ggas
}

@Entity
public class Pedido{}

@Entity
public class Movimentacao{}

Nesse caso lá no TransferenciaConverter no construtor eu preciso receber esse dao ou pode ser um construtor padrão?

Você precisa, de alguma forma, conseguir pegar essa transferência.

Como você a reconhece? Pelo id do pedido ou pelo id da movimentação? Ou pelo ID dos dois?

Ai você passa na url o valor que você usaria para conseguir chegar em uma Transferencia. COMO você vai conseguir pegá-la, é o que você vai fazer no converter…

Blz,

eu reconheço a transferência pelo id do pedido.

Li a parte da documentação, juntando com o que você me passou já sei como vou fazer.

Muito Obrigado.