Ajuda com botao alterar

8 respostas
fabiodurgante

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> ???

8 Respostas

K

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

K

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.

fabiodurgante

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

sera que é por isso que nao funciona ???

K

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

fabiodurgante

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 ???

K
tem sim, crie no seu bean um objeto;

Contato contatoEditar;

//get and set

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

fabiodurgante

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.

K
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.

Criado 27 de março de 2013
Ultima resposta 28 de mar. de 2013
Respostas 8
Participantes 2