[Resolvido][Vraptor2] Passagem de parâmetros (objeto) entre controllers

2 respostas
K

Salve Gujeiros.

Estou com uma dúvida e gostaria da ajuda dos amigos.

Tenho os seguinte controllers:

@Component(value="pedido/pedidoController")
@InterceptedBy(value={PedidoRepositoryInterceptor.class, PessoaRepositoryInterceptor.class, ClienteRepositoryInterceptor.class})
public class PedidoController {

         @Out(scope=ScopeType.SESSION)
         HistoricoPedido historicoPedido;

public void liberarPedido(@Parameter(key = "data") String data, 
			@Parameter(key = "usuario") String usuario, 
			@Parameter(key = "observacao") String observacao){
		
		Pedido pedido = alteraStatusPedido(Integer.parseInt(idPedido), 3);
		
		HistoricoPedido historicoPedido = new HistoricoPedido();
		historicoPedido.setPedido(pedido);
		historicoPedido.setUsuario(usuario);
		historicoPedido.setObservacao(observacao);

	}
}
@Component(value="pedido/historicoPedidoController")
@InterceptedBy(value={HistoricoPedidoRepositoryInterceptor.class})
public class HistoricoPedidoController {

	@Out(scope=ScopeType.SESSION)
	private List<String> controllerMessagesAndExceptions;
	
	private HistoricoPedidoRepository historicoPedidoRepository;
	
	public String adiciona(HistoricoPedido historicoPedido){
		String ret = "nok";
		try {
			ret = historicoPedidoRepository.adicionar(historicoPedido);
		} catch (RepositoryException e) {
			logger.log(Level.ERROR, "Erro ao persistir obj.", e);
		} 
		return ret;
	}

Fiz o redirecionamento no arquivo view.properties da seguinte forma:
/pedido/pedidoController.liberarPedido.ok = /pedido/historicoPedidoController.adiciona.logic

Porém o controller HistoricoPedidoController recebe “NULL” como parâmetro do método adiciona();

Gostaria de saber se é possível passa o objeto “historicoPedido” para o controller HistoricoPedidoController.

Obrigado.

[]'s

2 Respostas

G

Pelo que entendi você adiciona na session, e depois que fazer o get desse objeto. Estou certo?

Porém você está fazendo errado, pois caso você coloque na entrada do método o vraptor vai injetar o que veio como parametro da url, e não o que está na session. Para pegar os dados da session você precisa deixa-lo como atributo com @In(scope=Session).

K

garcia-jj:
Pelo que entendi você adiciona na session, e depois que fazer o get desse objeto. Estou certo?

Porém você está fazendo errado, pois caso você coloque na entrada do método o vraptor vai injetar o que veio como parametro da url, e não o que está na session. Para pegar os dados da session você precisa deixa-lo como atributo com @In(scope=Session).

Obrigado pela ajuda garcia-jj.

Agora funcionou. :slight_smile:

Fiz a seguinte alteração no HistoricoPedidoController:

@Component(value="pedido/historicoPedidoController")
@InterceptedBy(value={HistoricoPedidoRepositoryInterceptor.class})
public class HistoricoPedidoController {

	@In(scope=ScopeType.SESSION)
	private HistoricoPedido historicoPedido;
	
	private HistoricoPedidoRepository historicoPedidoRepository;
	
	public void adicionaHistoricoPedido(){
		adiciona(this.historicoPedido);
	}
	
	public String adiciona(HistoricoPedido historicoPedido){
		String ret = "nok";
		try {
			ret = historicoPedidoRepository.adicionar(historicoPedido);
		} catch (RepositoryException e) {
			logger.log(Level.ERROR, "Erro ao persistir obj.", e);
		} 
		return ret;
	}
}

No view.properties redireciono para o método adicionaHistoricoPedido:
/pedido/pedidoController.liberarPedido.ok = /pedido/historicoPedidoController.adicionaHistoricoPedido.logic

[]'s

Criado 23 de outubro de 2009
Ultima resposta 23 de out. de 2009
Respostas 2
Participantes 2