Parametros com result.use(Results.logic()).redirectTo(...) [RESOLVIDO]

Estou com problema em parametros enviados por result.

Não estou conseguindo identificar se o parametro é nulo, vazio ou se tem conteudo.
Será que tem limite de quantidade de parametros, ou estou cometendo algum erro?
Já testei de várias formas para verificar se é nulo: ordem.().equals(""), ordem.trim().equals(""), ordem == null, ordem.equals(null) e até ordem.length() < 1.

Como os parametros são enviados:

result.use(Results.logic()).redirectTo(PaisController.class).listar(coluna, valor_pesquisa, pagina, linhasPorPagina, ordem);

Recebendo:

public void listar(String coluna, String valor_pesquisa, int pagina, int linhasPorPagina, String ordem) {
...
}

Ja tentou um debug pra ver qual valor esta vindo? Ou entao logar o que esta chegando?

[]'s

Tenho uma classe (Resourse) que faz uma chamada com result:

result.use(Results.logic()).redirectTo(PaisController.class).listar(coluna, valor_pesquisa, pagina, linhasPorPagina, ordem);

Esta mesma classe recebe a rrequisição:

result.use(Results.logic()).redirectTo(PaisController.class).listar(coluna, valor_pesquisa, pagina, linhasPorPagina, ordem);

Quando o parametro ordem é enviado com valor nulo, não estou conseguindo identificar depois se ele realmente é nulo, vazio ou se tem conteudo.
Já testei de várias formas para verificar se é nulo: ordem.().equals(""), ordem.trim().equals(""), ordem == null, ordem.equals(null) e até ordem.length() < 1.

É engraçado que se envio o parametro ordem com um conteúdo, este conteúdo chega corretamente.

Alguma idéia ou eu estou utilizando result de forma incorreta?

Debugando aparece com nulo.

Ué… se ele é nulo, entao ordem == null nao tem pq dar errado.

Pois é… mas a consistencia if não identifica como nulo

Tem como colocar o código desse seu método e do outro método inteiro que chama essa lógica?

[]'s

Os dois método estão na mesma classe:

quem chama:

@Restricao({"Excluir"})
public void remover(Long id, String coluna, String valor_pesquisa, int pagina, int linhasPorPagina, String ordem)  {
		
	boolean retorno = this.paisRegra.remover(id);
	if (retorno){
		listar(coluna, valor_pesquisa, pagina, linhasPorPagina, ordem);
		result.use(Results.logic()).redirectTo(PaisController.class).listar(coluna, valor_pesquisa, pagina, linhasPorPagina, ordem);
	}else{
		htmlErroRemocao();
		result.use(Results.logic()).redirectTo(PaisController.class).erroRemocao();
	}
}

quem é chamado:

@Restricao({"Visualizar"})
@Path("/pais/listar") 
public void listar(String coluna, String valor_pesquisa, int pagina, int linhasPorPagina, String ordem) {
	if (pagina == 0)
		pagina = 1;
	if (linhasPorPagina == 0)
		linhasPorPagina = this.paisRegra.getPaginadorRegistrosPorPagina();
		this.paisRegra.listar(coluna, valor_pesquisa, pagina, linhasPorPagina, ordem);
	htmlLista(this.paisRegra.getPaiss(), coluna, valor_pesquisa, pagina, linhasPorPagina, ordem);
	result.include("tabelaHtml",tabelaHtml);
}

ele tá vindo nulo no método lista?

será que não está vindo ordem = “null”? ou seja, a string “null”?

essa ordem vem como parâmetro pela url? tipo num @Path("/…/{ordem}")?

No método listar, se imprimir ou se verificar com debuga (Eclipse) aparece como null.
Mas não consegui verificar com if que é null. Parece basteira, mas realmente não consegui ainda.
Isso me gera problema com o Hibernate.

if (ordem == null || ordem.equals("") || ordem.equals("null")) {
    // vê se entra nesse if
}

eu estou suspeitando daquele método htmlList(…)

Pq antes de vc fazer o result.use vc faz uma chamada explicita la pro metodo listar (q por sinal, é o mesmo que vc usa depois pra redirecionar).

Entrou…
Aparentemente é: ordem.equals(“null”).

Bacana…

Só mais uma coisa Cinei que eu não entendi no seu código.

Vc esta fazendo duas chamadas pro listar() … uma explicita e uma redirecionando. É isso mesmo? Nao esta correndo o risco de fazer operacoes duplicadas?

Abracao e bom uso do VRaptor.

só pra explicar melhor,

se você faz um redirectTo ou um forwardTo para algum método, o vraptor vai executar o método, usando os parâmetros
que você passou, você não precisa chamar na mão o método

Vou tentar te explicar (no médoto listar):

Chama um método em outra classe (PaisRegra) com várias regras para localização, inclusive os parametros passados

this.paisRegra.listar(coluna, valor_pesquisa, pagina, linhasPorPagina, ordem);

Chama um método que gera códigos html (tabelaHtml), meio chatinho de gerar direto na jsp

htmlLista(this.paisRegra.getPaiss(), coluna, valor_pesquisa, pagina, linhasPorPagina, ordem);

listar.jsp insere a String abaixo: ${tabelaHtml}

result.include("tabelaHtml",tabelaHtml); .

Só não entendi porque do conteúdo “null”.

será que não veio na requisição algo como
ordem=null
?

No VRaptor 2, funcionava direitinho.
Este comportamento acontece apenas na versão 3.

provavelmente pq o vraptor2 tratava a string null como valor null…

o vraptor3 não faz isso…
se o parâmetro não vem na requisição, ele fica nulo
se o parametro vem:
meuParametro=

ele fica como string vazia…

se vem como
meuParametro=null
vira string “null”

talvez seja interessante mudar isso…

Valeu a ajuda. Pelo menos já sei onde está o problema.
Muito obrigado Adriano e Lucas.