[RESOLVIDO] Problemas com action dentro de um dataTable

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>

Alguém ?

Obrigado!

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 :smiley:

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.

Alguém ?

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]