Bom dia pessoal.
Estou com o seguinte problema, na minha página tenho um botao ‘ok’, que ao ser clicado chama um ‘dialog’. Nesse ‘dialog’ tem uma tabela, cada item de uma tabela é um commandLink, quando clico nesse commandLink simplesmente fecha o dialog, eu precisaria que ele ‘setasse’ a pessoa no Bean.
Se alguém puder me ajudar ou tiver uma opinião ai eu agradeço.
<p:dialog>
5 Respostas
você tem uma propriedade commandLink chamado ajax. tenta por ele para “false” e posta posta o resultado.
Fábio o meu código esta assim:
<p:dialog id="dlgPacientes" header="Resultado da pesquisa" widgetVar="dtPacientes"
modal="true" width="1000" height="500" >
<h:form id="formDl">
<p:dataTable id="tbl" var="p" value="#{bpaiBean.pacientes}"
emptyMessage="NENHUM PACIENTE ENCONTRADO" >
<p:column style="width:25px">
<f:facet name="header">PACIENTE</f:facet>
<h:commandLink actionListener="#{bpaiBean.teste}" >
<h:outputText value="#{p.pessoa.nome}" />
<f:setPropertyActionListener target="#{bpaiBean.bpai.paciente}" value="#{p}" />
</h:commandLink>
</p:column>
<p:column style="width:25px; text-align:center">
<f:facet name="header">RG</f:facet>
<h:outputText value="#{p.pessoa.rg}" />
</p:column>
<p:column style="width:25px; text-align:center">
<f:facet name="header">CPF</f:facet>
<h:outputText value="#{p.pessoa.cpf}" />
</p:column>
<p:column style="width:25px; text-align:center">
<f:facet name="header">CARTÃO SUS</f:facet>
<h:outputText value="#{p.cartaoSUS}" />
</p:column>
</p:dataTable>
</h:form>
</p:dialog>
Segue algumas considerações:
1º Qual versão do primeFaces você esta usando. De preferencia para a ultima versao estavel do produto (3.1.1)
2º Tenta colocar seu form acima do dialog e testa :
<h:form id="formDl">
<p:dialog id="dlgPacientes" header="Resultado da pesquisa" widgetVar="dtPacientes"
modal="true" width="1000" height="500" >
....
</p:dialog>
</h:form>
3º voce usou a propriedade ajax = false ?
Da pra vc usar no commandlink e no setPropertyActionListener …
<h:commandLink actionListener="#{bpaiBean.teste}" ajax=false>
<h:outputText value="#{p.pessoa.nome}" />
<f:setPropertyActionListener target="#{bpaiBean.bpai.paciente}" value="#{p}" ajax = false/>
</h:commandLink>
testa ai e posta o resultado …
Vamor ter menos dor de cabeça ainda, se você esta utilizando primefaces, utilize o p:commandLink e não o h:commandLink, utilize tudo que esteja disponível.
<p:commandLink actionListener="#{bpaiBean.teste}" ajax="true">
<h:outputText value="#{p.pessoa.nome}" />
<f:setPropertyActionListener target="#{bpaiBean.bpai.paciente}" value="#{p}" />
</p:commandLink>
outra coisa, muitas ações do primefaces são chamadas por jquery, logo, seu dialog pode ser exibido/escondido a qualquer minuto, você tem essas funções:
dlgPacientes.show()
dlgPacientes.hide()
e junto do seu p:commandLink você tem vários onAlgumaCoisa, como por exemplo, oncomplete, onclick, onetc…
sabendo casar esses elementos você vai ter o resultado que você está querendo, mas como o fabio disse, utilize ajax=“true” para ser realizado a operação sem sair do view da página, e se for necessário, de update em algum elemento pelo próprio commandlink pelo update=“NomeDoQueUpdatear”.
André, Fábio valeu pela ajuda mas testei aqui e foi sem sucesso, vai ver o primefaces não dá suporte a essa questão aqui.
Vou ver se consigo fazer de outro jeito, obrigado pela atenção valeu.
A questão é que o meu commandLink não chama o meu método no Bean, quando clico no commandLink simplesmente fecha o dialog.