Jsf/PrimeFaces - DataModel

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