Vraptor 3 - Metodos sobrecarregados no controller [RESOLVIDO]

3 respostas
Rodrigo_Pereira_Vale

Pessoal,

Gostaria de saber como funciona a sobrecarga de metodos no controler.

Possuo o seguinte controler:

package com.ibm.releasenotes.controller;

import java.util.List;
import org.apache.log4j.Logger;
import com.ibm.releasenotes.dao.UserAccountDao;
import com.ibm.releasenotes.factory.DaoFactory;
import com.ibm.releasenotes.model.UserAccount;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;

@Resource
public class UserManagementController {

	private final Logger logger = Logger.getLogger(UserManagementController.class);
	private final UserAccountDao userAccountDao;
	private Result result;
	
	public UserManagementController(DaoFactory daoFactory, Result result) {
		this.userAccountDao = daoFactory.getUserAccountDao();
		this.result = result;
	}

	public List<UserAccount> listUsers() {
		return userAccountDao.findAll();
	}
	
	public List<UserAccount> listUsers(String name){
		return userAccountDao.getUserAccountListByName(name);
	}

}

Reparem que tenho 2 metodos sobrecarregados:
public List<UserAccount> listUsers() e public List<UserAccount> listUsers(String name)

Só o fato de eu fazer uma requisicão à userManagement/listUsers onde existe um parametro name no post o Vraptor já vai entender que não
é para usar o metodo sem parametro e sim o metodo com parametro?

Abraços

3 Respostas

Lavieri

só vai entrar no método com parametros, se vc o enviar por GET ou POST

por exemplo

/userManagement/listUsers -> abre o sem argumentos
/userManagement/listUsers?blue=blam -> abre o sem argumento
/userManagement/listUsers?name=bla -> abre o com argumento name
/userManagement/listUsers?name=bla&blue=blam -> abre o com argumento name

Rodrigo_Pereira_Vale

muito obrigado Lavieri.

Lucas_Cavalcanti

na verdade acho que isso vai dar um erro: “There are two rules that matches the URI /userManagement/listUsers”

sugiro que vc diferencie as urls:

@Path("/userManagement/listAllUsers")
public List<UserAccount> listUsers() {  
    return userAccountDao.findAll();  
}
@Path("/userManagement/listUsers")
public List<UserAccount> listUsers(String name){  
    if (name == null || name.isEmpty()) {
        result.redirectTo(this).listUsers();
    }
    return userAccountDao.getUserAccountListByName(name);  
}
Criado 23 de abril de 2010
Ultima resposta 23 de abr. de 2010
Respostas 3
Participantes 3