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.