Generics

9 respostas
d34d_d3v1l

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?

9 Respostas

drsmachado

A variável baseService precisa ser final

d34d_d3v1l

Mesmo assim da erro :frowning:

drsmachado

Camarada…
Eu não estou vendo erro algum.

d34d_d3v1l

Cara, da erro em tempo de projeto!!

:frowning:

primeiro não acha AbstractController

depois da syntax error no instance :frowning:

drsmachado

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

L

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

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

@Named("usuarioBean")
@ConversationScoped
public class UsuarioBean extends SCPBean {
...
  private EntityDataModel<Usuario>        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;
        }

}
d34d_d3v1l

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

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.

d34d_d3v1l

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.

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

Criado 26 de outubro de 2012
Ultima resposta 26 de out. de 2012
Respostas 9
Participantes 3