boa tarde, estou começando no JSF e tenho um duvida.
Estou utilizando o datamodel no meu bean onde gerei get e set do mesmo para carregar um datatable até aqui tudo bem. Está carregando certinho.
Mais o que estou encucado é quando clico no menu que chama a rotina, percebi que esta passando pelo método get e consequentemente passando pelo dao varias vezes, porque isso ocorre? Alguém já passou por isso? Isso prejudica o desempenho?
Obrigado.
Leandrooooo
Sim cara, isso prejudica sim o desempenho.
O JSF faz muita mágica por baixo dos panos… E ja vi muitos request e chamadas que nunca entendi.
Mas acho estranho ele passar no teu DAO varias vezes… Tem algum pedacin de código pra gente analisar?
abraços
Opa cara tem sim.
Vou enviar o cabeçalho com uma coluna do datatable de um dos arquivos xhtml que acessa a bean, pois, são dois arquivos que acessam a bena, por isso que na bean tem dois datamodel e vou enviar a classe bean completa.
Desde de já obrigado.
Espero que possa me ajudar.
<p:dataTable var="dados" widgetVar="wfVerbaTable"
value="#{workflowfBean.dmWfVerba}" selectionMode="single"
selection="#{workflowfBean.wfVerbaVo}" rowKey="#{dados.codigo}"
filteredValue="#{workflowfBean.filtroWfVerba}"
emptyMessage="Nenhum Dado Encontrado!">
<p:column headerText="Código" style="width:5%"
filterBy="#{dados.codigo}" filterMatchMode="contains">
<center>
<h:outputText value="#{dados.codigo}" />
</center>
</p:column>
@ManagedBean(name = "workflowfBean")
@RequestScoped
public class WorkFlowBean{
/**
* WorkFlow - Verba Disponível
*/
private List<WfVerbaVo> filtroWfVerba;
private WfVerbaVo wfVerbaVo = new WfVerbaVo();
private transient DataModel<WfVerbaVo> dmWfVerba;
public List<WfVerbaVo> getFiltroWfVerba() {
return filtroWfVerba;
}
public void setFiltroWfVerba(List<WfVerbaVo> filteredCars) {
this.filtroWfVerba = filteredCars;
}
public WfVerbaVo getWfVo() {
return wfVerbaVo;
}
public void setWfVo(WfVerbaVo wfVo) {
this.wfVerbaVo = wfVo;
}
public DataModel<WfVerbaVo> getDmWfVerba() throws Exception {
System.out.println("getDmWfVerba");
try {
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
String idEmpresa = (String) session.getAttribute("idenemp");
if ((idEmpresa != null) && (idEmpresa.length() > 0)){
WorkFlowDao dao = new WorkFlowDao();
if ((idEmpresa.substring(0,3).equals("SUP")) || (idEmpresa.substring(0,3).equals("GER"))){
List<WfVerbaVo> lista = dao.getListVerbaDisp(idEmpresa);
this.dmWfVerba = new ListDataModel<WfVerbaVo>(lista);
}else{
List<WfVerbaVo> lista = dao.getListVerbaDisp("");
this.dmWfVerba = new ListDataModel<WfVerbaVo>(lista);
}
}
} catch (FacesException e) {}
return dmWfVerba;
}
public void setDmWfVerba(DataModel<WfVerbaVo> relacao) {
this.dmWfVerba = relacao;
}
/**
* WorkFloW - Pedidos Aberto
*/
private WfPedAbertoVo wfPedAbeVo = new WfPedAbertoVo();
private transient DataModel<WfPedAbertoVo> dmWfPedAbe;
public WfPedAbertoVo getWfPedAbeVo() {
System.out.println("getWfPedAbeVo");
return wfPedAbeVo;
}
public void setWfPedAbeVo(WfPedAbertoVo wfPedAbeVo) {
System.out.println("setWfPedAbeVo");
this.wfPedAbeVo = wfPedAbeVo;
}
public DataModel<WfPedAbertoVo> getDmWfPedAbe() throws Exception{
System.out.println("getDmWfPedAbe");
try {
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
String idEmpresa = (String) session.getAttribute("idenemp");
if ((idEmpresa != null) && (idEmpresa.length() > 0)){
WorkFlowDao dao = new WorkFlowDao();
if ((idEmpresa.substring(0,3).equals("SUP")) || (idEmpresa.substring(0,3).equals("GER"))){
List<WfPedAbertoVo> lista = dao.getListPedAbertoWf(idEmpresa);
this.dmWfPedAbe = new ListDataModel<WfPedAbertoVo>(lista);
}else{
List<WfPedAbertoVo> lista = dao.getListPedAbertoWf("");
this.dmWfPedAbe = new ListDataModel<WfPedAbertoVo>(lista);
}
}
} catch (FacesException e) {}
return dmWfPedAbe;
}
public void setDmWfPedAbe(DataModel<WfPedAbertoVo> dmWfPedAbe) {
System.out.println("setDmWfPedAbe");
this.dmWfPedAbe = dmWfPedAbe;
}
}
Cara aproveitando, se puder me ajudar com a anotação @ViewScoped, gostaria de aplicar neste bean, como ficaria?
Pelo que estou entendendo sobre essa anotação, ela fica “viva” apenas na visualização do pagina e ocupa menos memoria…é isso mesmo? pode me dar mais detalhe sobre ele.
Essa anotação ainda não está clara, estou com dificuldade de entender.
Obrigado.
Sim, o viewScoped mantem o managedBean na memoria enquanto o usuario fica na mesma página.
Da uma pesquisada ai no google que vai achar muito material sobre isto.
Pois é cara, não consigo te dizer pq ele esta chamando varias vezes o seu DAO