Ajuda com botao alterar

seguinte tenho o seguinte jsf

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui">

<h:head></h:head>
<body>
	<h:form>
		<p:dataTable value="#{formularioContato.contatos}" var="contato">
		
			<p:column sortBy="#{contato.nome}">
				<f:facet name="header">
					<h:outputText value="Nome" />
				</f:facet>
				<h:outputText value="#{contato.nome}" />
			</p:column>


			<p:column sortBy="#{contato.email}">
				<f:facet name="header">
					<h:outputText value="Email" />
				</f:facet>
				<h:outputText value="#{contato.email}" />
			</p:column>

			<p:column sortBy="#{contato.telefone}">
				<f:facet name="header">
					<h:outputText value="Telefone" />
				</f:facet>
				<h:outputText value="#{contato.telefone}" />
			</p:column>



			<p:column>
	<f:facet name="header">
 <h:outputText value="Opções" />
	</f:facet> 
<p:commandButton value="Editar"	action="#{formularioContato.editarContato()}" />

			</p:column>

		</p:dataTable>
		<p:commandButton value="voltar" action="#{formularioContato.voltar()}" />
		<p:commandButton value="Editar" action="#{formularioContato.editarContato()}" />


	</h:form>
</body>
</html>


os botoes que estao dentro do </p:dataTable> nao funciona tu clica neles e nao faz nada, porem os 2 botoes que estao abaixo fora do </p:dataTable> esses funcionan o que esta errado nos botoes dentro do </p:dataTable> ???

tente colocar um ID no form, e um ID na tabela
e coloque no botao o atributo process=":idFORM:idTabela"

ou entao apenas o atributo process="@form" no botao.
Lembrando que se quiseres passar esse contato para o mb terás que fazer o f:setPropertyActionListener passando a variavel dessa interação, para sim edita-lo.

nao funciono nenhum dos 2 opcoes eu tenho um <h:form id=“formulario”>
e outro <p:dataTable

sera que é por isso que nao funciona ???

entao faz o process="@this" com o f:setPropertyActionListener

isso ai cara agora sim funcionou

<h:commandButton value="Editar"	action="#{formularioContato.editarContato()}" process="@this" >
    <f:setPropertyActionListener target="#{contato.cod_contato}" value="cod_contato" />
</h:commandButton>

so que seguinte quero, pegar a linha selecionada pegar o cod_contato como que faço ???
tipo no beans

public String editarContato(long id) {
		try {		
      contato = contatoEjb.consultar(id);
     contatoEjb.AtualizarContato(contato);
			return "/jsf/ok.xhtml";	
			
		}catch(EJBException ex){
			return "/jsf/erro.xhtml";	
		}
		
	}

entende, pego o id da linha mando para o bean, depois faço a consulta para pegar o objeto para atualizar fazer merge, teria como pegar direto todo o objeto da linha selecionada ???

tem sim, crie no seu bean um objeto;
Contato contatoEditar;
//get and set

e no seu
<f:setPropertyActionListener target="#{contato.contatoEditar}" value="{contato}" />

todo o meu form

<h:form id="formulario">
		<p:dataTable value="#{formularioContato.contatos}" var="contato" id ="tabela">
		
			<p:column sortBy="#{contato.nome}">
				<f:facet name="header">
					<h:outputText value="Nome" />
				</f:facet>
				<h:outputText value="#{contato.nome}" />
			</p:column>


			<p:column sortBy="#{contato.email}">
				<f:facet name="header">
					<h:outputText value="Email" />
				</f:facet>
				<h:outputText value="#{contato.email}" />
			</p:column>

			<p:column sortBy="#{contato.telefone}">
				<f:facet name="header">
					<h:outputText value="Telefone" />
				</f:facet>
				<h:outputText value="#{contato.telefone}" />
			</p:column>



			<p:column>
	<f:facet name="header">
 <h:outputText value="Opções" />
	</f:facet> 

<h:commandButton value="Editar"	action="#{formularioContato.editarContato(contato)}" process="@this" >
    <f:setPropertyActionListener target="#{contato.cod_contato}" value="nome" />
</h:commandButton>

			</p:column>

		</p:dataTable>
		<p:commandButton value="voltar" action="#{formularioContato.voltar()}" />



	</h:form>

criei no bean o Contato contatoEditar; //get and set
so que no <f:setPropertyActionListener target="#{contato.}" value="{contato}" />
contato. somente parece cod email nome telefone nao lista a opcao do contato inteiro que foi criado recentemente.

no <f:setPropertyActionListener>
vai no target #{nomeDoSeuBean.contatoEditar}
e no value a variavel de interação da sua tabela
q pelo que colastes é contato,
ficando value = “#{contato}”

Acho q não entendi o que fizestes por ultimo,
a sua tabela não é uma interação de Contato?
se for só vai exibir os atributos de contato.