Olá galera, estou com um problema e acredito que alguém já tenha passado por isso.
Para inicio, minha arquitetura é a seguinte: JSF 2 + PrimeFaces 3
Tenho uma listagem de meus objetos em um p:dataTable, e dentro da tabela nas minha linhas tenho links que servirão para editar, deletar etc…
Consigo listar meus objetos normalmente, o problema está nos links. Não consigo invocar os métodos do managedBean quando meu escopo é de request.
segue minha tabela:
<p:dataTable id="tabelaRede" value="#{redeCredenciadaBean.redesCredenciada}" var="rede" style="width:450px" >
<p:column headerText="Razao" >
<h:outputText value="#{rede.razaoSocial}" />
</p:column>
<p:column headerText="CNPJ" >
<h:outputText value="#{rede.cnpj}" >
<f:converter converterId="cnpjConverter" />
</h:outputText>
</p:column>
<p:column headerText="Acao" >
<h:commandLink action="#{redeCredenciadaBean.carregarVisualizarRedeCredenciada}" >
<h:graphicImage value="/images/lupa.gif" style="border:0" />
<f:param id="codigo" name="codigo" value="#{rede.codigo}" />
</h:commandLink>
</p:column>
</p:dataTable>
Detalhe, quando o escopo é de Session, Application, View, consigo chamar meus métodos normalmente.
Só que não posso deixar todos meus escopos de Session.
Alguém pode me ajudar?
Agradeço a ajuda.
Você pode deixar o seu bean em scope de @ViewScoped.
Outro ponto deve usar o process de um commandButton por exemplo
<p:commandButton process="@this" actionListener="bean.actionListener">
<f:setPropertyActionListener value="#{entity}" target="#{bean.selectedEntity}" />
</p:commandButton>
Obrigrado pela resposta cllorente.
Meu problema de deixar como ViewScoped, é que preciso redirecionar meus dados para outra tela para edição, e quando saio da tela
meu ManagedBean morre, pois o escopo é de view… Alguma solução??
Lembre-se que sua tabela deve ser envolvida por um h:form.
<h:form>
<p:datatable>
...
</p:datatable>
</h:form>
Essa é minha tabela.
<h:form prependId="false">
<p:panel header="Pesquisar Rede Credenciada">
<h:panelGrid columns="3">
<h:outputText value="#{label['ipft.redecredenciada.razaosocial']}" />
<p:inputText value="#{usuarioBean.parametroPesquisa}" size="50"/>
<p:commandButton value="#{label['ipft.pesquisar']}" ajax="false" actionListener="#{redeCredenciadaBean.pesquisarRedeCredenciada}" />
<br/>
</h:panelGrid>
<p:dataTable id="tabelaRede" value="#{redeCredenciadaBean.redesCredenciada}" var="rede" style="width:450px" >
<p:column headerText="#{label['ipft.redecredenciada.razaosocial']}" >
<h:outputText value="#{rede.razaoSocial}" />
</p:column>
<p:column headerText="#{label['ipft.redecredenciada.cnpj']}" >
<h:outputText value="#{rede.cnpj}" >
<f:converter converterId="cnpjConverter" />
</h:outputText>
</p:column>
<p:column headerText="#{label['ipft.acao']}" >
<h:commandLink action="#{redeCredenciadaBean.carregarVisualizarRedeCredenciada}" >
<h:graphicImage value="/images/lupa.gif" style="border:0" />
<f:param id="codigo" name="codigo" value="#{rede.codigo}" />
</h:commandLink>
</p:column>
</p:dataTable>
</p:panel>
</h:form>
Como está esse método? #{redeCredenciadaBean.carregarVisualizarRedeCredenciada}
Suas telas estão envolvidas por <h:head> e <h:body> ?
Só do <h:body>, pois utilizo facelets e a mesma não é um template…
public String carregarVisualizarRedeCredenciada() {
System.out.println("teste");
}
Só um método simples para teste.
Se for com escopo de resquest nem consigo invocar o método, mas se for de view consigo normalmente.
O problema de não usar o de view é que preciso mandar os dados para outra tela.
Agradeço aajuda…
Vê se consegue quebrar meu galho
Em vez de actionListner usa action, você está desligando o Ajax mesmo além de passar para outra página.
Depois de trocar para action verifica se o metodo está sendo executado.
Funciona também não, simplesmente dá um reload na página e não invoca o método…
Só um chute, muda de commandLink para p:commandButton
Também não funciona. Já tentei todo tipo de botão, link e nem sequer invoca…
Tá um aperreio só aqui… E preciso urgentemente resolver esse problema.
Qual versão do Mojarra?
Tente assim:
<p:commandLink process=“idDoForm:idDaTabela:idDesteCommandLink”>
</p:commandLink>
Não utilizo Mojarra.
Também não funciona com o process.
OBS: o post construtor é chamado normalmente ao clicar no link da tabela;
Já li também que pode está parando em alguma fase do jsf, como poderia interceptar essa fase para verificação?
Agradeço
Não usa Mojarra? Como assim?
Mas faz assim:
Coloca um <p:messages id=msg/> e no commandLink manda dar update nele e veja se aparece alguma mensagem.
<p:messages id=msg/>
<p:commandLink update=msg ..../>
Acredito que esteja ocorrendo algum erro na validação do formulário.
Existe um componente de log do primefaces. <p:log />
Olha só, usei o p:log e me retorna isso ao clica no link
# Post Data:formRede=formRede&formRede%3Aj_idt26=&javax.faces.ViewState=H4sIAAAAAAAAAJ1VzW8bRRR%2FdmLiJi2kCeqHUERIq4jQdBcHyleoaENTusJpkQ0RhAMZ707tjcY7k5lZe0NoBAdAggNIwC0SSHAsJ%2F4CxA2pSFTiAhfggpAAIS5QLuXN%2BJPEwSojefRm9s17v%2FnNez9f%2FRUyQkk4uEZqxIl1yJwLRFWWiMgMffv5F4dWvx6A9HkYZpwE54mvufRgn65IqiqcBYl44gyYsb%2BexXkUfxkNo5e5rBZoQB9beykM9NzDsYTxF%2FM2AyNR2blUWqO%2Bnn%2F3q%2Bc%2FHFUzLA2QCHM0XoctGEAr1bbSiO2kz6uOiiPnMvGpsjOjWjmUOc%2BS8hLVFR4sJgIxqZBH0Bip%2FRhVwlGTNTGuO%2F3W84dHVt754fe09Rtv%2B3U8Pn79reIfK9cft%2FgQxxSXZYcI4ldor4BeVTDvBvmO5V65xyQ3V8jWHwD32KZEMp40U%2BSHJCALlESOoGo9DhWRhX9%2FvAKwk6%2BilmFUnv%2F0%2BvJPP09sPtXiK6VhogG7QQyt0Ug7Z32NYBaNLURSvwKbriBlqtwdIFwWKr0ru5NUdJVNnpnLzeZO5SaJDZZHTxpReXrqFq8ylSjDwkj97K2zcHvn%2Fss8DGxFHDAvi7cSOHbX2UPtqhns1E%2FbyphD7dXQloT7usnDGhM8MgQ%2B53mRiPXxZyQXVOqNp%2BmGahYVjNli6YK2GMXV7o8IK1MjLAzaPWXdFjhneN1rk%2FLVb7b%2F%2Fi0NqRXrF9NEpLYMqMMaDjDuE7ZsdotY32b3LkCcJ%2FbCeSnW%2FwXUBDiim3lqEgZryCN0hqHR%2BNxtJ4Pc8Jjry10GMZ3cC9NySOsFzvuiuo0Rpb0dNHmRpmUqx3786JM%2FX3vzEaTJa9EkYbTjdzGulqh84%2BoHEyPvf%2F92qx9OWCJnTGxDJFWtM1bW8nZv66%2BDq9v33%2FglDYMeZCsodT4PaB6GfB5HWm5oGLON55o8brPx8pA1yxjbyGSYQ%2FcakSGJtF0m4iYODemFAk5Ca6xRzD3dm6KiJppeQPGkskhqVL7w5Wen39u%2BtpSGdB72%2BUiLukiqrUTDCn0Ce0bDoQa0kLtFiulZ%2BDIpMTqP74jp7u37IsZAYb%2FZHMhuHjKoAWUMPW1DJ6497hIhWOgT0%2FsuvqNR66Lxm7evB7tEHxIsiePdALoiON0RelTCMH4PYis0Go6anj6Hd%2BPlAq1y5KfR3A92yrL334SxhppqcwTuPLapKYqW1RjZCGSEtSUiKWPcYfSxBKv%2FRx9PPTqby8310MfdadsiOL0HrP5KN95WOk1KlBFj9m3TAXyTmb2K4hzRpF%2BLZiWve1FAG%2FhnTc0gon8A1JLUfzIIAAA%3D&javax.faces.partial.ajax=true&javax.faces.source=formRede:tabelaRede:0:j_idt34&javax.faces.partial.execute=@all&formRede:tabelaRede:0:j_idt34=formRede:tabelaRede:0:j_idt34&codigo=20
# Response received succesfully.
# DOM is updated.
# Response completed.
Ve se dá pra enteder o erro e me explicar…
Obrigado pela ajuda.
Esqueci de mandar o link que estou invocando.
<p:column headerText="ACAO" >
<p:commandLink action="#{redeCredenciadaBean.carregarVisualizarRedeCredenciada}" >
<h:graphicImage value="/images/lupa.gif" style="border:0" />
<f:param id="codigo" name="codigo" value="#{rede.codigo}" />
</p:commandLink>
</p:column>
Coloca esse codigo ai… e me diz o que aparece nas messages.
<p:messages id=msg/>
<p:column headerText="ACAO" >
<p:commandLink ajax="true" update="msg" action="#{redeCredenciadaBean.carregarVisualizarRedeCredenciada}" >
<h:graphicImage value="/images/lupa.gif" style="border:0" />
<f:param id="codigo" name="codigo" value="#{rede.codigo}" />
</p:commandLink>
</p:column>
Com esse código aí, aparece esse log
[code]
Initiating ajax request.
Form to post formRede.
URL to post /ipft/pages/redeCredenciada/listarRedeCredenciada.jsf.
Post Data:formRede=formRede&formRede%3Aj_idt26=&javax.faces.ViewState=H4sIAAAAAAAAAJ1Vz28bRRR%2B3sTETVpIE9QfQhEhrSICzW4dSkGEijY0pSuctrIhgnAg492pvdF4ZzI7a28IjeAASHAACbhFAgmO5dS%2FoOKGVCQqcYEL9IKQWoR6KeVS3ox%2FkjhYZSSPZnffvPe97733%2BfItSItIwt4VUiV2rAJmnyVReYGI9MBPV7%2Fdt%2FxDH1hnYJBx4p8hnuLShV2qLGlU5sxPxAsnQa%2FdtQzuw%2FhLKxi%2ByGUlT3363Mqbga9mnokljL6RMxEYCUv2%2BeIK9dTsJ9%2B%2F9sVwNMUsgEToq%2FEqbEAfnlKtk4XYpj1esaM4tC8Sj0ZmZ1RFNmX2K6S0QFWZ%2B%2FOJQExRwEOor9Ru9CrhoI6aaNOtdqu5%2FUNLH%2F%2F6p2XsRlt2bYuv3vuwcHvp%2BvMGH%2BKY4LJkE0G8Mu3m0K0I5t4lP7Ps24%2Fp4DqFTO0pcA6tSyTjRb2FXkB8MkdJaAsarcZBRGT%2B3x8vAWzlq6BkEJZmv7m%2B%2BNvvY%2BsvNflKKRirw64TQ6s0VPYpTyGYeX0WIqldgnVHkBKNnC0gHBZEalt0OymrChs%2FOZM9kn06O06Msxxa0pDKExP3mcpEEmkWhmqn7p%2BFB9v5L%2FLANx2xR1cWsxK4tvfZ8VbX9Lf7p3VK60utp4ENCU90koc9JnioCXzVdUMRq8MXJBdUqrWX6VrUaCoYMc3SAW0%2BjCudHxFWukpY4LdmypjNcc4w3Wvj8p0fN%2F%2F%2Bw4LUkrGLaSJSGxrUfgV7GPcIW9RvC9jf%2Bu0jgDif3Ann%2BVj9F1Dt4IBqxKlK6K8ij9BemkZt86jZNHLNY7Ynd2nENL0TpsWA1vKc90T1gEmWIk3DbenJmXcbf%2B1d3jx696YF%2FS5kyihHHvdpDgY8HodKrikYMcPhaGqdxnDkIKMfY2x1HWEazatEBiRU5jER93ApsObyuAmlAAztUxoJiZS7pWBuqGiJypEbX359590PnsWCuc2CNREbu3NxpUjl%2B5c%2FHxv67JePmpM5reVisjtFBUUUPYviSWWBVKl8%2FbsrJz7dvLZggZWDXR6Cic6RSjOJwQhtfHNHwb562gF3ChRTY8FbpMjoLNYRwz3esyL6gMJ%2Br7EwpxykUQNK6HrSuE4cc90hQrDAI3r2HayjVuuCtps11YNtog8JtsThTgAdHuxOD106YRC%2F%2B7ERGgUH9Uyfxtx4KU8rHPmpD%2Fexdlt2%2F5vQp4GG2hyAhw%2BtK4qiZTRG1h1pYW2KSEofHtL6WITl%2F6OPx48eyWZnuujj9rAtEZzcAVZvpRttKZ0iRcqIPvYc0z6sydROTXGaKNJrRDOS19zQp3X8x3TPIKJ%2FAB8IlYsyCAAA&javax.faces.partial.ajax=true&javax.faces.source=formRede:tabelaRede:0:j_idt34&javax.faces.partial.execute=@all&javax.faces.partial.render=formRede:tabelaRede:0:msg&formRede:tabelaRede:0:j_idt34=formRede:tabelaRede:0:j_idt34&codigo=20
Response received succesfully.
DOM is updated.
Response completed.
-[/code]