Generics

Galera,

eu to tentando criar um ManagedBean genérico com primefaces. Bom, a dúvida é o seguinte…

eu tenho a classe genérica:

public abstract class AbastractController<T, PK extends Serializable> {

e dentro dela eu tenho os seguintes atributos (preciso mostrar para demonstrar minha necessidade):

	private BaseService<T, PK> baseService;

	private LazyDataModel<T> lazyModel; 

Esse atributo lazyDataModel é coisa do Primefaces para fazer filtros e paginação :slight_smile:
Ai eu quero fazer uma “Implementação” genérica dessa classe também… Então, quando eu vou instânciá-la
(no construtor) eu faço:

		this.lazyModel = new LazyDataModel<T>() {
			
			@Override  
		    public List<T> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,String> filters) {  
		              //code HERE
		    }  

Só que onde eu tenho “//code HERE” eu preciso acessar o BaseService que é um atributo da classe externa.

Como eu faço isso? Ja tentei:

//nada
AbstractController.instance.baseService 
//nada2
AbstractController<T>.instance.baseService 
//nada3
AbstractController<T,PK>.instance.baseService 

Galera, alguma sugestão?

A variável baseService precisa ser final

Mesmo assim da erro :frowning:

Camarada…
Eu não estou vendo erro algum.

Cara, da erro em tempo de projeto!!

:frowning:

primeiro não acha AbstractController

depois da syntax error no instance :frowning:

Pois é, mas cada erro possui uma mensagem específica.
Sem saber qual a mensagem, fica difícil.
Mas, boa sorte aí.

Faço mais ou menos o que vc quer assim:

https://github.com/lsjunior/rockframework/blob/master/rockframework-faces/src/main/java/br/net/woodstock/rockframework/web/faces/primefaces/EntityDataModel.java
https://github.com/lsjunior/rockframework/blob/master/rockframework-faces/src/main/java/br/net/woodstock/rockframework/web/faces/primefaces/EntityRepository.java

[code]@Named(“usuarioBean”)
@ConversationScoped
public class UsuarioBean extends SCPBean {

private EntityDataModel usuarios;
@EJB
private UsuarioService usuarioService;

public String pesquisar() {
EntityRepository repository = new EntityRepository() {

                    @Override
                    public QueryResult getResult(final Page page) {
                            return UsuarioBean.this.getUsuarioService().pesquisarPorNome(UsuarioBean.this.getNomeFiltro(), page);
                    }

                    @Override
                    public Object getEntity(final Object id) {
                            return UsuarioBean.this.getUsuarioService().recuperarPorId((Integer) id);
                    }

            };
            this.usuarios = new EntityDataModel<Usuario>(ConfigBean.QTD_REGISTROS_TABELA, repository);
            return null;
    }

}[/code]

Eu não sei como que o componente LazyLoading se comporta perante o model…

Eu estou tentando criar um Controller genérico. Para isso quero criar o seu LazyModel
genérico também…

vc já viu alguma implementação genérica de um MB?
vlw

ManagedBean genérico? Conte-me mais sobre os benefícios disto.
Considerando, entretanto, que cada página pode ter uma estrutura específica, uma vez que você não deve pensar apenas no crud básico, pois, caso pensasse, não deveria pensar em um MB genérico, mas, em criar um MB “pai” que fosse estendido pelos demais MBs com os métodos básicos (insere, exclui, altera, pesquisa um, pesquisa vários e os que mais você achar que devem ser genéricos) e, então, para os demais, aqueles que são específicos, colocar em cada MB específico.

[quote=drsmachado]ManagedBean genérico? Conte-me mais sobre os benefícios disto.
Considerando, entretanto, que cada página pode ter uma estrutura específica, uma vez que você não deve pensar apenas no crud básico, pois, caso pensasse, não deveria pensar em um MB genérico, mas, em criar um MB “pai” que fosse estendido pelos demais MBs com os métodos básicos (insere, exclui, altera, pesquisa um, pesquisa vários e os que mais você achar que devem ser genéricos) e, então, para os demais, aqueles que são específicos, colocar em cada MB específico.[/quote]

Sim, trata-se de uma classe abstrata genérica…