Variável Vazia (VRaptor 3 + Objectify + Low-Level API + JSP) AppEngine. [RESOLVIDO]

Boa Tarde.

Estou tentando utilizar o “redirectTo” do VRaptor, felizmente o redirecionamento para ouro arquivo JSP esta funcionando, mas infelizmente a variável (List) esta vazia.
Resolvi utilizar o “redirectTo” para evitar códigos duplicados em arquivos JSP’s, pois tenho 7 métodos que utilizam o mesmo código JSP, mas infelizmente quando estou utilizando o “redirectTo” a variável (List) esta retornando como vazia.
Um pequeno detalhe, quando estou realizando os testes locais o código com o “redirectTo” esta funcionando normalmente, assim que realizo o deploy no AppEngine é que a varável (List) fica com seu valor vazio.
Segue abaixo os códigos que estou utilizando.

[color=red]JSP - formCadastro:[/color]

[code]<form id=“equipamentoForm” action="<c:url value="/equipamentos" />" method=“post”>

Cadastro de Equipamentos

	<label for="patrimonio">Patrimonio:</label>
	<input id="patrimonio"  type="text" name="equipamento.patrimonio" value="${equipamento.patrimonio}"/>
	<br/>
	<label for="serie">Serie:</label>
	<input id="serie" type="text" name="equipamento.serie" value="${equipamento.serie}"/>
	<br/>
	<label for="name">Nome:</label>
	<input id="nome" type="text" name="equipamento.nome" value="${equipamento.nome}"/>
	<font size="2"><a id="nome" href="/nomeEquipamento/novo">Criar</a></font>
	
	<c:forEach items="${errors}" var="error">
		<c:if test="${error.category == 'equipamento.nome'}">
			<br/>
 			<font size="2" color="red">${error.message}</font> 
		</c:if>
	</c:forEach>
	
	<br/>
	<label for="marca">Marca:</label>
	<input id="marca" type="text" name="equipamento.marca" value="${equipamento.marca}"/>
	<font size="2"><a id="marca" href="/marcaEquipamento/novo">Criar</a></font>
	
	<c:forEach items="${errors}" var="error">
		<c:if test="${error.category == 'equipamento.marca'}">
			<br/>
			<font size="2" color ="red">${error.message}</font>
		</c:if>
	</c:forEach>
	
	<br/>
	<label for="modelo">Modelo:</label>
	<input id="modelo" type="text" name="equipamento.modelo" value="${equipamento.modelo}"/>
	<font size="2"><a id="modelo" href="/modeloEquipamento/novo">Criar</a></font>
	<br/>
	<label for="classificacao">Classificação:</label>
	<input id="classificacao" type="text" name="equipamento.classificacao" value="${equipamento.classificacao}"/>
	<font size="2"><a id="classificacao" href="/classificacaoEquipamento/novo">Criar</a></font>
	
	<c:forEach items="${errors}" var="error">
		<c:if test="${error.category == 'equipamento.classificacao'}">
			<br/>
			<font size="2" color="red">${error.message}</font>
		</c:if>
	</c:forEach>
	
	<br/>
	<label for="setor">Setor:</label>
	<input id="modelo" type="text" name="equipamento.setor" value="${equipamento.setor}"/>
	<font size="2"><a id="setor" href="/setorEquipamento/novo">Criar</a></font> 
	
	<c:forEach items="${errors}" var="error">
		<c:if test="${error.category == 'equipamento.setor'}">
			<br/>
			<font size="2" color="red">${error.message}</font>
		</c:if>
	</c:forEach>
	
	<br/>
	<button type="submit">Salvar</button>
</fieldset>
[/code][color=red]Obs.:[/color] Verifique o Anexo "formCadastro". [b][color=red]Classe - EquipamentoController:[/color][/b] [code]@Resource public class EquipamentoController {
private final EquipamentoDao daoEquipamento;
private final AgregacaoEquipamentoDao daoAgregacaoEquipamento;
private final MarcaEquipamentoDao daoMarcaEquipamento;
private final NomeEquipamentoDao daoNomeEquipamento;
private final ClassificacaoEquipamentoDao daoClassificacaoEquipamento;
private final SetorEquipamentoDao daoSetorEquipamento;
private final EquipamentoNomeDao daoEquipamentoNome;
private final EquipamentoMarcaDao daoEquipamentoMarca;

private final Result result;
private final Validator validator;

public EquipamentoController(EquipamentoDao daoEquipamento,
		AgregacaoEquipamentoDao daoAgregacaoEquipamento,
		MarcaEquipamentoDao daoMarcaEquipamento,
		NomeEquipamentoDao daoNomeEquipamento,
		ClassificacaoEquipamentoDao daoClassificacaoEquipamento,
		SetorEquipamentoDao daoSetorEquipamento,
		EquipamentoNomeDao daoEquipamentoNome,
		EquipamentoMarcaDao daoEquipamentoMarca,
		Result result, Validator validator) {
	this.daoEquipamento = daoEquipamento;
	this.daoAgregacaoEquipamento = daoAgregacaoEquipamento;
	this.daoMarcaEquipamento = daoMarcaEquipamento;
	this.daoNomeEquipamento = daoNomeEquipamento;
	this.daoClassificacaoEquipamento = daoClassificacaoEquipamento;
	this.daoSetorEquipamento = daoSetorEquipamento;
	this.daoEquipamentoNome = daoEquipamentoNome;
	this.daoEquipamentoMarca = daoEquipamentoMarca;
	this.result = result;
	this.validator = validator;
}

    @Post
@Path("/equipamentos")
public void salvar(Equipamento equipamento) {
	List<Equipamento> equipamentos = new ArrayList<Equipamento>();
	
	//Validacao do Nome do Equipamento
	if (equipamento.getNome() == "") {
		this.validator.add(new ValidationMessage("Nome do Equipamento é obrigatório","equipamento.nome"));
	}
	if (this.daoNomeEquipamento.busca(equipamento.getNome()) == null && equipamento.getNome() != "") {
		this.validator.add(new ValidationMessage("Por favor, crie o Nome do Equipamento","equipamento.nome"));
	}

	//Validacao da Marca do Equipamento
	if (equipamento.getMarca() == "") {
		this.validator.add(new ValidationMessage(
		"Marca do Equipamento é obrigatório","equipamento.marca"));
	}
	if (this.daoMarcaEquipamento.busca(equipamento.getMarca()) == null && equipamento.getMarca() != "") {
		this.validator.add(new ValidationMessage("Por favor, crie a Marca do Equipamento","equipamento.marca"));
	}

	//Validacao da Classificacao do Equipamento
	if (equipamento.getClassificacao() == "") {
		this.validator.add(new ValidationMessage("Classificação do Equipamento é obrigatório", "equipamento.classificacao"));
	}
	if (this.daoClassificacaoEquipamento.busca(equipamento.getClassificacao()) == null && equipamento.getClassificacao() != "") {
		this.validator.add(new ValidationMessage("Por favor, crie a Classificação do Equipamento", "equipamento.classificacao"));
	}

	//Validacao do Setor do Equipamento
	if (equipamento.getSetor() == "") {
		this.validator.add(new ValidationMessage("Setor do Equipamento é obrigatório", "equipamento.setor"));
	}
	if (this.daoSetorEquipamento.busca(equipamento.getSetor()) ==  null && equipamento.getSetor() != "") {
		this.validator.add(new ValidationMessage("Por favor, crie o Seotr do Equipamento", "equipamento.setor"));
	}
	
	this.validator.onErrorUsePageOf(this).formCadastro(equipamento);

	equipamento.setNumeroSavitec(this.daoAgregacaoEquipamento.pegaNumeroSavitecESomaMaisUm());
	this.daoEquipamentoMarca.salvar(equipamento);
	this.daoEquipamentoNome.salvar(equipamento);
	this.daoEquipamento.salvar(equipamento);
        	
	equipamentos.add(equipamento);
	
	this.result.redirectTo(this).exibir(equipamentos);
}

    @Get
@Path("/equipamentos/nome")
public List<Equipamento> exibir (List<Equipamento> equipamentos) {
	return equipamentos;
}

}[/code]
[color=red]JSP - exibir:[/color]

[code]















<c:forEach items="${equipamentoList}" var=“equipamento”>










</c:forEach>
Numero Savitec Patrimonio Serie Nome Marca Modelo Classificação Setor
${equipamento.numeroSavitecPadronizadoENG} ${equipamento.patrimonio} ${equipamento.serie} ${equipamento.nome} ${equipamento.marca} ${equipamento.modelo} ${equipamento.classificacao} ${equipamento.setor}
[/code][color=red]Obs.:[/color] O Resultado quando preenchido o cadastro do Equipamento fica conforme esta no anexo "exibir".

Verifiquei que na documentação do VRaptor 3 tem um pequeno tópico sobre App Engine (http://vraptor.caelum.com.br/documentacao/google-app-engine/), só que infelizmente não consegui entender.

Sucesso!
Abraço!



esse redirect só vai funcionar se vc está com sessões habilitadas no GAE…

vc pode mudar para fazer a query dessa lista de novo no método exibir.

Olá, Lucas Cavalcanti.

Acabei substituindo o “redirectTo” do VRaptor para “forwardTo” e esta funcionando só não consegui entender direito o motivo.
Qual a diferença entre os dois (“redirectTo” e “forwardTo”)?

Sucesso!
Abraço!

forward é totalmente no servidor
redirect é no cliente (a requisição volta pro browser e ele faz a requisição para outra url) por isso que não funcionou

Olá, Lucas Cavalcanti.

Muito obrigado pela ajuda!

Sucesso!
Abraço!