Eu tenho em uma página, um modalpanel que exibe registros de determinada tabela do banco, mas eu percebi q a query que retorna esses registros esta sendo executada mesmo quando eu nao clico no botao pra exibir o modalpanel…
EDIT: na verdade quem exibe os registros é um picklist que esta neste modalpanel…
Tem algum jeito de fazer com que essa query seja executada somente quando eu exibir o modalpanel ??
posta o seu código pra gente ver o que vc está fazendo
cleiton_herrmann
opa blz...
esse é o codigo do botao que chama o modal, ele só aparece se tiver registros sendo exibidos no datatable, senao nao tem sentido gerar um relatorio em branco...
<rich:modalPanelid="selecionarCamposPanel"left="425"top="50"width="450"height="270"><f:facetname="header"><h:panelGroup><h:outputTextvalue="Selecione os campos do relatório"></h:outputText></h:panelGroup></f:facet><f:facetname="controls"><h:panelGroup><h:graphicImagevalue="/img/close.png"styleClass="hidelink"id="hidelink"/><rich:componentControlfor="selecionarCamposPanel"attachTo="hidelink"operation="hide"event="onclick"/></h:panelGroup></f:facet><a:formid="modalRelatorio"><h:panelGridcolumns="1"columnClasses="top, top"><rich:pickListcopyAllControlLabel="#{messages['msg.btnCopyAll']}"copyControlLabel="#{messages['msg.btnCopy']}"removeAllControlLabel="#{messages['msg.btnRemoveAll']}"removeControlLabel="#{messages['msg.btnRemove']}"value="#{relatorioList.camposSelecionados}"id="campos"><a:supportevent="onlistchanged"reRender="botaoGerar"/><f:selectItemsvalue="#{relatorioList.camposSelectItens}"/></rich:pickList><s:divid="botaoGerar"styleClass="actionButtons"><h:commandButtonid="gerar"rendered="#{not empty relatorioList.camposSelecionados}"action="#{relatorioList.gerarRelatorio(contaList.resultList, contaList.conta)}"value="Ok"/></s:div></h:panelGrid></a:form></rich:modalPanel>
intaum, os ítens do picklist, sao campos que o usuario quer que sejam impressos no relatorio ( #{relatorioList.camposSelectItens} ) e esse cara ( #{relatorioList.camposSelecionados} ) sao os campos selecionados pelo usuario... o que eu quero é que ( #{relatorioList.camposSelectItens} ) seja preenchido somente quando abrir o modal...
cleiton_herrmann
esqueci... esse é o codigo da action que me retorna os selectItens do picklist
@In(create=true)privateSubItemMenuListsubItemMenuList;@In(create=true)EntityManagerentityManager;privateSubItemMenusubItemMenu;publicvoidgetSubItemMenu(){StringviewId=FacesContext.getCurrentInstance().getViewRoot().getViewId();Stringentidade=viewId.replaceAll("/|List.xhtml|Edit.xhtml|.xhtml","").toLowerCase();subItemMenu=(SubItemMenu)entityManager.createQuery("from SubItemMenu as subItem where subItem.entidade=?1").setParameter(1,entidade).}
os campos eu tiro do bean... subItemMenu.getCamposSubItem();
cleiton_herrmann
tem mesmo ?
ralphsilver
É o Seguinte:
Voce está populando o picklist no value dele… no value, sempre que se carrega a página… ele será executado… o que vc pode fazer é não carregar os dados de imediato no #{relatorioList.camposSelecionados} deixando ele vazio… e quando a pessoa ativar o modal panel que provavelmente deva ser um <a4j:commandLink /> , vc popula o #{relatorioList.camposSelecionados} e de um reRender em campos tipo assim:
<a4j:commandLink reRender="campos" action="<popule o relatorioList.camposSelecionados nessa action>" />
ele irá popular o relatorioList.camposSelecionados via ajax
ralphsilver
com certeza assim dá certo
ralphsilver
ralphsilver:
É o Seguinte:
Voce está populando o picklist no value dele… no value, sempre que se carrega a página… ele será executado… o que vc pode fazer é não carregar os dados de imediato no #{relatorioList.camposSelecionados} deixando ele vazio… e quando a pessoa ativar o modal panel que provavelmente deva ser um <a4j:commandLink /> , vc popula o #{relatorioList.camposSelecionados} e de um reRender em campos tipo assim:
<a4j:commandLink reRender="campos" action="<popule o relatorioList.camposSelecionados nessa action>" />
ele irá popular o relatorioList.camposSelecionados via ajax
Voce está populando o picklist no value dele… no value, sempre que se carrega a página… ele será executado… o que vc pode fazer é não carregar os dados de imediato no #{relatorioList.camposSelecionados} deixando ele vazio… e quando a pessoa ativar o modal panel que provavelmente deva ser um <a4j:commandLink /> , vc popula o #{relatorioList.camposSelecionados} e de um reRender em campos tipo assim:
<a4j:commandLink reRender="campos" action="<popule o relatorioList.camposSelecionados nessa action>" />
ele irá popular o relatorioList.camposSelecionados via ajax
opa, blz vlw ralphsilver, numa lida rápida me parece q vai funcionar sim, mas agora to em outra atividade, vai ter q ficar pra depois, qq coisa posto denovo ai…