Boa tarde, estou iniciando o desenvolvimento de um template de CRUD em JSF.
Nessa aplicação vai existir várias telas de crud, minha idéia é fazer com que todas essas páginas usem o mesmo managed bean, pra isso o managedBean deve receber alguns parametros, como o tipo da classe que a tela trabalha, as colunas da tabela de pesquisa, etc…
A idéia é usar esses parametros pra inicializar os componentes do crud.
Porém como todos sabem, o managedbean é construído automaticamente pelos frameworks que itilizamos pra programar em java web.
[quote=mateusviccari]É possível fazer herança de managedBean?[/quote]Sim. Mas não o tipo de herança que pessoas que querem um CRUD genérico funcione.
Não adianta na super classe colocar List<?> valores ou List. Não vai funcionar.
Tive uma idéia aqui que parece que da certo.
Eu crio o managedBean principal, que seria o template, e nele eu tenho uma instancia de uma classe Configuracoes. Nessa classe é que eu defini o comportamento dos itens do template, por ex.: Gravar, consultar, excluir…
E possuo um outro managedBean, de requestScoped, pra cada tipo de classe que vai ser usada no template, esse managedBean tem a função getConfiguracoes, que retorna a configuração previamente definida, e seto ele na classe template através de um comando.
Aí a primeira coisa que faço quando tenho uma pagina que vai usar o template é transmitir essa configuração do managedBean requestScoped pra variavel configuracoes do template, e o resto faço a partir dessas configurações…
Não sei se expliquei direito mas se alguem quiser fazer algo parecido responde aqui e trocamos uma idéia.
[quote=mateusviccari]Tive uma idéia aqui que parece que da certo.
Eu crio o managedBean principal, que seria o template, e nele eu tenho uma instancia de uma classe Configuracoes. Nessa classe é que eu defini o comportamento dos itens do template, por ex.: Gravar, consultar, excluir…
E possuo um outro managedBean, de requestScoped, pra cada tipo de classe que vai ser usada no template, esse managedBean tem a função getConfiguracoes, que retorna a configuração previamente definida, e seto ele na classe template através de um comando.
Aí a primeira coisa que faço quando tenho uma pagina que vai usar o template é transmitir essa configuração do managedBean requestScoped pra variavel configuracoes do template, e o resto faço a partir dessas configurações…
Não sei se expliquei direito mas se alguem quiser fazer algo parecido responde aqui e trocamos uma idéia.[/quote]Beleza, o que você definiu é o mesmo que já foi dito acima. O “ideal” de um CRUD genérico é isso que você falou.
Agora faz um teste. Tente criar um MB genérico e tente fazer um datatable apontando para uma lista.
OBS.: é possível criar diversas funções em comum dentro os MBs, mas nunca vi alguém conseguir um CRUD completo. Se você conseguir, eu vou mostrar esse post para todos os outros posts criados sobre esse assunto. [=
<p:tab title="Consulta" titleStyle="font-size: small;">
<p:dataTable style="font-size: small" id="tabelaConsulta" var="obj" value="#{managedBeanTemplate.objetos()}" paginator="true" rows="10">
<ui:insert name="tabelaConsulta"/>
</p:dataTable>
</p:tab>
No meu managed bean o objetos esta assim
public ArrayList objetos(){
return configuracoes.objetos();
}
E a minha classe configurações é uma classe abstrata, aí eu implemento essa classe em varios managedBeans do tipo requestScoped, só pra carregar as configurações, como no exemplo:
[code] @ManagedBean(name=“managedBeanUnidade”) @RequestScoped
public class ManagedBeanUnidade extends Configuracoes implements Serializable {
@Override
public ArrayList objetos() {
try {
PreparedStatement pst = ConnectDb.getConnection().prepareStatement("select * from Unidade");
ArrayList al = JdbcUtil.convertResultSetIntoList(Unidade.class, pst.executeQuery());
return al;
} catch (Exception e) {
e.printStackTrace();
return new ArrayList<Unidade>();
} finally {
ConnectDb.closeCurrentConnection();
}
}
public Configuracoes getConfiguracoes(){
return new ManagedBeanUnidade();
}
}[/code]
Aí depois disso, na tela de cada crud é so transferir a configuração desse managedBean request pro managedBean do template, dessa forma que eu fiz ja ta funcionando a DataTable:
Por enquanto está sendo feita a inclusão manual das colunas, mas pretendo fazer algo pra ele fazer isso automaticamente, usando esse esquema da transferencia de configurações.