Bom dia galera,
montei uma estrutura genérica de CRUD e vou postar aqui para a avaliação e critica de vcs:
Controller Genérico:
public abstract class GenericController<T extends BaseModel,Y extends GenericDao><T, Long>> {
T objeto,filtro;
List<T> listagem;
private final Class<T> classeModel;
boolean trazerTodos;
public Y dao;
public static String LISTAGEM = "";
public static String CADASTRO ="";
public GenericController(){
setaNavegacao();
this.classeModel = (Class<T>)
((ParameterizedType)getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
}
public void limpar() throws InstantiationException, IllegalAccessException{
listagem = new ArrayList<T>();
objeto = classeModel.newInstance();
filtro = classeModel.newInstance();
trazerTodos = true;
}
public T getObjeto() {
return objeto;
}
public void setObjeto(T objeto) {
this.objeto = objeto;
}
public T getFiltro() {
return filtro;
}
public void setFiltro(T filtro) {
this.filtro = filtro;
}
String redirecionar(String pagina) throws InstantiationException, IllegalAccessException{
limpar();
return pagina;
}
public String novo() throws InstantiationException, IllegalAccessException{
return redirecionar(CADASTRO);
}
public String listar() throws InstantiationException, IllegalAccessException{
return redirecionar(LISTAGEM);
}
public String salvar(){
String retorno = LISTAGEM;
try{
if(objeto.getId()==null){
dao.salvar(objeto);}
else{
dao.atualizar(objeto);
}
MessageUtil.mostraMensagemSucesso();
}catch(Exception e){
retorno = "";
MessageUtil.mostraMensagemErro();
}
return retorno;
}
public String editar(){
return CADASTRO;
}
public void excluir(){
String msgErro = "Problema ao excluir registro";
try {
dao.excluir(objeto);
listagem.clear();
MessageUtil.mostraMensagemSucesso();
}catch(Exception e){
e.printStackTrace();
MessageUtil.addMessage(msgErro, FacesMessage.SEVERITY_ERROR);
}
}
public List<T> getListagem() {
if(listagem.size()==0 && trazerTodos) {
listagem = dao.todos(null);
}
return listagem;
}
public void setListagem(List<T> listagem) {
this.listagem = listagem;
}
public abstract void setaNavegacao();
public abstract void injetaDao();
}
Controller Implementação:
@Component
@Scope("globalSession")
public class TutorController extends GenericController<Tutor,TutorDao>{
public TutorController(){
injetaDao();
}
final static String DAO_CONCRETO = "tutorDaoImp";
@Override
public void setaNavegacao() {
LISTAGEM = "listarTutor";
CADASTRO ="cadastrarTutor";
}
public void filtrar(){
trazerTodos = false;
listagem = dao.findByExample(filtro);
}
@Override
public void injetaDao() {
ApplicationContext ctx = AppContext.getApplicationContext();
try{
super.dao = (TutorDao) ctx.getBean(DAO_CONCRETO);
}catch(Exception e){
e.printStackTrace();
}
}
}
classe Model:
@Entity
@Table(name="tb_tutor")
public class Tutor extends BaseModel {
O que acharam?