Problema no remover + jsf 2

pessoal,

alguem sabe como atualizar o datatable do primefaces ao fazer uma exclusão?

O codigo ta excluindo no banco, mas não consegue atualizar a tabela…mesmo eu chamando o metodo de listar novamente

segue meu MB

public void remove() { InitialContext contexto = new InitialContext(); ChequeFacade cheque = (ChequeFacade) contexto.lookup("ChequeBean/remote"); //chamo meu EJB cheque.excluirCheque(chequeVo); chequeVo = new ChequeVo(); listaCheque = getListaCheque(); }

dentro do meu EJB:

ChequeVo chequeASerRemovido = em.find(ChequeVo.class, chequeVo.getCodigo()); if((chequeASerRemovido != null) && (chequeASerRemovido.getCodigo() > 0)) { em.remove(chequeASerRemovido); }

no jsf:

&lt;h:commandLink action="#{chequeMB.remove}"&gt; &lt;f:ajax render="@form"/&gt; <img /> &lt;f:setPropertyActionListener value="#{cheque}" target="#{chequeMB.chequeVo}"/&gt; &lt;/h:commandLink&gt;

ta removendo no banco, mas mesmo eu apertando CTRL+ F5, eu digitando o endereço novamente, ele não atualiza.

alguem sabe pq? :x

Axo q vc tem q usar o binding…veja como aprendi numa video-aula…

listagem-alunos.jsp

<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://jsftutorials.net/htmLib" prefix="htm" %>
<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<%@ taglib uri="http://myfaces.apache.org/trinidad" prefix="tr" %> 

<!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:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="css/principal.css" type="text/css" />
</head>

<f:view>
	<htm:div id="divPrincipal" >
		<c:import url="cabecalho.jsp">
			<c:param name="titulo" value="Studio Pilates - Listagem de Alunos"></c:param>
		</c:import>
		<c:import url="voltar.jsp"></c:import>
		<h:form id="formListagemAlunos">
			<tr:subform id="consultarAlunos">
				<htm:div styleClass="corpoEsquerda">
					<h:commandButton 
						id="incluirNovoAluno"
						action="#{alunoBean.novoAluno}"
						value="Incluir Novo"
						styleClass="panelBotaoAdicionar">
					</h:commandButton>
					<h:panelGrid columns="1" styleClass="panelGrid">
						<h:panelGrid columns="2" width="100%" columnClasses="colunaDireita, colunaEsquerda">
							<h:outputText value="Nome:" ></h:outputText>
							<h:inputText id="inputNomeFornecedor" value="#{entradaAlunosBBean.aluno.nome}" converter="stringNull"></h:inputText>
						</h:panelGrid>
						<h:commandButton id="consultarFornecedor" value="Consultar" styleClass="panelBotaoConsultar"/>
					</h:panelGrid>
				</htm:div>
			</tr:subform>
			<htm:div style="overflow:auto; width:100%; height:400px;" styleClass="corpoEsquerda">
				<t:dataTable
					id="listaAlunos"
					styleClass="dataTableProdutos"
					width="90%"
					value="#{entradaAlunosBBean.alunos}"
					var="aluno"
					rowClasses="linhaClara, linhaEscura"
					binding="#{alunoBean.dataTableAluno}">
						<t:column sortable="true" sortPropertyName="nome">
							<f:facet name="header"><h:outputText value="Nome"></h:outputText></f:facet>
							<h:outputText value="#{aluno.nome}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="cidade">
							<f:facet name="header"><h:outputText value="Cid" title="Cidade"></h:outputText></f:facet>
							<h:outputText value="#{aluno.cidade.codigo}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="endereco">
							<f:facet name="header"><h:outputText value="End." title="Endereço"></h:outputText></f:facet>
							<h:outputText value="#{aluno.endereco}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="numero">
							<f:facet name="header"><h:outputText value="Num." title="numero"></h:outputText></f:facet>
							<h:outputText value="#{aluno.numero}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="complemento">
							<f:facet name="header"><h:outputText value="Compl" title="complemento"></h:outputText></f:facet>
							<h:outputText value="#{aluno.complemento}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="bairro">
							<f:facet name="header"><h:outputText value="Bairro"></h:outputText></f:facet>
							<h:outputText value="#{aluno.bairro}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="cep">
							<f:facet name="header"><h:outputText value="CEP"></h:outputText></f:facet>
							<h:outputText value="#{aluno.cep}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="foneres">
							<f:facet name="header"><h:outputText value="Res." title="Fone Residencial"></h:outputText></f:facet>
							<h:outputText value="#{aluno.foneres}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="fonecom">
							<f:facet name="header"><h:outputText value="Com." title="Fone Comercial"></h:outputText></f:facet>
							<h:outputText value="#{aluno.fonecom}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="cel">
							<f:facet name="header"><h:outputText value="Cel." title="Celular"></h:outputText></f:facet>
							<h:outputText value="#{aluno.fonecel}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="sexo">
							<f:facet name="header"><h:outputText value="Sexo"></h:outputText></f:facet>
							<h:outputText value="#{aluno.sexo}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="idade">
							<f:facet name="header"><h:outputText value="Idade"></h:outputText></f:facet>
							<h:outputText value="#{aluno.idade}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="email">
							<f:facet name="header"><h:outputText value="e-Mail"></h:outputText></f:facet>
							<h:outputText value="#{aluno.email}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="dtnasc">
							<f:facet name="header"><h:outputText value="DtNasc" title="Data de Nascimento"></h:outputText></f:facet>
							<h:outputText value="#{aluno.nascimento}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="dtcad">
							<f:facet name="header"><h:outputText value="DtCad" title="Data de Cadastro"></h:outputText></f:facet>
							<h:outputText value="#{aluno.cadastro}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="dtsaida">
							<f:facet name="header"><h:outputText value="DtSaida" title="Data de Saida"></h:outputText></f:facet>
							<h:outputText value="#{aluno.demissao}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="peso">
							<f:facet name="header"><h:outputText value="Peso"></h:outputText></f:facet>
							<h:outputText value="#{aluno.peso}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="altura">
							<f:facet name="header"><h:outputText value="Alt." title="altura" ></h:outputText></f:facet>
							<h:outputText value="#{aluno.altura}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="rg">
							<f:facet name="header"><h:outputText value="RG"></h:outputText></f:facet>
							<h:outputText value="#{aluno.rg}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="cpf">
							<f:facet name="header"><h:outputText value="CPF"></h:outputText></f:facet>
							<h:outputText value="#{aluno.cpf}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="obs">
							<f:facet name="header"><h:outputText value="OBS"></h:outputText></f:facet>
							<h:outputText value="#{aluno.obs}"></h:outputText>
						</t:column>
						<t:column sortable="true" sortPropertyName="desconto">
							<f:facet name="header"><h:outputText value="Desc" title="desconto"></h:outputText></f:facet>
							<h:outputText value="#{aluno.desconto}"></h:outputText>
						</t:column>
						<h:column>
								<f:facet name="header">
									<h:outputText value="Editar"></h:outputText>
								</f:facet>
								<h:commandButton styleClass="panelBotaoEditar" value="Editar" action="#{alunoBean.editarAluno}">
								</h:commandButton>
						</h:column>
						<h:column>
								<f:facet name="header">
									<h:outputText value="Excluir"></h:outputText>
								</f:facet>
								<h:commandButton styleClass="panelBotaoSubtrair" value="Excluir" action="#{alunoBean.excluirAluno}"
										onclick="return confirm('Confirma a exclusão do aluno?');">
								</h:commandButton>
						</h:column>
						<f:facet name="footer">
							<h:outputText
								value="Não há alunos!"
								rendered="#{empty entradaAlunosBBean.alunos}"/>
						</f:facet>
					</t:dataTable>
				</htm:div>
		</h:form>
	</htm:div>
</f:view>

</html>

meu alunoBean

package br.com.luxu.controller;

import javax.faces.component.html.HtmlDataTable;

import br.com.luxu.DAO.HibernateDAO;
import br.com.luxu.DAO.InterfaceDAO;
import br.com.luxu.classe.Aluno;
import br.com.luxu.classe.Cidade;
import br.com.luxu.util.FacesContextUtil;

public class AlunoBean {
	
	private Aluno aluno = new Aluno();
	private int cid_Codigo;
	private HtmlDataTable dataTableAluno;
	
	public void setCid_Codigo(int cid_Codigo) {
		this.cid_Codigo = cid_Codigo;
	}

	public int getCid_Codigo() {
		return cid_Codigo;
	}
	
	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public Aluno getAluno() {
		return aluno;
	}
	
	public String novoAluno(){
		return "entradaAlunos";
	}
	
	public void salvarAluno(){
		InterfaceDAO<Aluno> alunoDAO = new HibernateDAO<Aluno>(Aluno.class, FacesContextUtil.getRequestSession());
		Cidade cidade = new Cidade();
		cidade.setCodigo(this.getCid_Codigo());
		this.getAluno().setCidade(cidade);
		alunoDAO.salvar(aluno);
	}
	
	public String alterarAluno(){
		InterfaceDAO<Aluno> alunoDAO = new HibernateDAO<Aluno>(Aluno.class, FacesContextUtil.getRequestSession());
		Cidade cidade = new Cidade();
		cidade.setCodigo(this.getCid_Codigo());
		this.getAluno().setCidade(cidade);
		alunoDAO.atualizar(aluno);
		return "alterado";
	}
	
	public String excluirAluno(){
		Aluno alunoExcluir = (Aluno) getDataTableAluno().getRowData();
		InterfaceDAO<Aluno> alunoExcluirDAO = new HibernateDAO<Aluno>(Aluno.class, FacesContextUtil.getRequestSession());
		alunoExcluirDAO.excluir(alunoExcluir);
		return null;
	}
	
	public String editarAluno(){
		this.aluno = (Aluno) getDataTableAluno().getRowData();
		return "editarAlunos";
	}
	
	public String confirmarCidade(){
		InterfaceDAO<Cidade> cidadeDAO = new HibernateDAO<Cidade>(Cidade.class, FacesContextUtil.getRequestSession());
		return null; // permanece na mesma pagina
	}

	public void setDataTableAluno(HtmlDataTable dataTableAluno) {
		this.dataTableAluno = dataTableAluno;
	}

	public HtmlDataTable getDataTableAluno() {
		return dataTableAluno;
	}
}

pelo que eu sei, o binding é feito para pesquisas. Ou ta errado meu pensamento? rs

o id chega no meu MB…passa para o meu ejb, e remove. O problema é que não atualiza de jeito nenhum a tabela.

Mesmo eu atualizando, abrindo em outro browser, etc.

Ele só exibe corretamente se eu dar um shutdown no jboss e startar ele de novo. Como se fosse algo da sessão, mas eu to usando ViewScope.

ahh esqueçi de dizer, quando faço alteração…a tabela é atualizada corretamente. Atualiza meu form do datatable e aparece certinho.

entaum tá fácil amigo…v como fez na alteração e faz o msm pra exclusão…bom pelo q sei e uso aki o binding é pra fazer a comunicação entre a página e os beans de controle…

mas ta igual, por isso to com duvida rs

na minha pagina ta assim:

[code] <h:commandLink “>
<f:ajax render=”@form"/>

                                     <f:setPropertyActionListener value="#{cheque}" target="#{chequeMB.chequeVo}"/>  
                                 </h:commandLink>[/code]

e no meu EJB:

ChequeVo chequeASerAlterado = em.find(ChequeVo.class, chequeVo.getCodigo()); if((chequeASerAlterado != null) && (chequeASerAlterado .getCodigo() > 0)) { em.merge(chequeASerAlterado ); }

luxu, consegui resolver “por um lado” kkkk

eu tava usando isso no metodo listar:

public List&lt;ChequeVo&gt; getListaCheques() { if(listaCheque == null) { ChequeFacade cheque = getObjeto(); listaCheque = cheque.listarCheques(); } return listaCheque; }

porque se eu não me engano, o jsf 2 tem um bug. Pelo que sei ele tem varias fases…e qdo vc solicita uma consulta, ele faz 6 consultas por tras do código.

Como se cada camada fizesse uma requisição pro banco. E eu fiz essa condição if para segurar todas essas requisições.

Quando eu tiro ela, tanto meu alterar, meu remover e meu incluir funcionam perfeitamente

Agora vem a pergunta: como eu resolvo esse problema de várias consultas numa única requisição do jsf?

:?: