Duvida vraptor 3

6 respostas
T

não consigo recuperar a varial conforme exemplo abaixo

@Path("/{page:[^about|terms|contact]}")
public void index(String page) {
    System.out.println(page);
}

algo errado?

6 Respostas

Lucas_Cavalcanti

a sua regex está errada…

o que vc quer é que seja uma dessas três palavras né?
o certo seria:

@Path("/{page:about|terms|contact}")
T

não, gostaria que pegar qualquer coisa que nao esteja na lista por isso da lista negada [^terms|contact]. Pois quero que quando chame /terms ou /contact va para os seus respectivos controllers em vez de entrar neste método. Porém não estou conseguindo recuperar o valor no método.

Chega ate a entrar no método mais não mostra nada na variavel.

no controller do terms tem:

@Path("/terms")  
public void index() {  
     //to do
}
Lucas_Cavalcanti

vc pode fazer isso então:

@Path(value="/{page}", priority=Integer.MAX_VALUE)

daí as rotas específicas vão ter mais prioridade…

T

fiz conforme você disse mais não funcionou…segue:

@Resource
public class IndexController {

	private final Result result;

	public IndexController(Result result) {
		this.result = result;
	}

	@Path("/")
	public void index() {
		result.include("variable", "VRaptor");
	}

	@Path(value = "/{login}", priority = Integer.MIN_VALUE)
	public void index(String login) {
		result.include("variable", login);
	}
}
@Resource
public class ContactController {

	private final Result result;

	public ContactController(Result result) {
		this.result = result;
	}

	@Path(value = "/contact", priority = Integer.MAX_VALUE)
	public void index() {

	}

}

porém entra somente no método da IndexController.

como o vraptor aceita expressão regular gostaria de no método do IndexController fazer uma regra que aceitasse qualquer valor que não esteja na lista
ex: [^contact|terms|about] e fazer os respectivos controllers para contact, terms, about com as regras /contact, /terms, /about.

Lucas_Cavalcanti

na verdade vc entendeu o contrário…

qto maior o valor da prioridade, menos prioridade ele tem, ou seja, ele vai ser testado por último…

então o que vc tem que fazer é só colocar prioridade no /{login} e deixar todo o resto com prioridade padrão:

@Path(value="/{login}", priority=Integer.MAX_VALUE)
public void index(String login) { ... }
//....
@Path("/contact")
public void index() { ... }
T

deu certo aqui…valeu lucas

Criado 31 de maio de 2010
Ultima resposta 31 de mai. de 2010
Respostas 6
Participantes 2