[RESOLVIDO] Primafaces, Dialog,DataTable

Caros, estou com um problema, que me estou empacado a varias horas, encontrei muitos problemas e soluções, tentando todos e nenhum funcionou…

é meu primeiro projeto com primefaces,jsf e é para concluir uma matéria.
utilizo Primefaces5.0

é o seguinte, eu tenho minha dataTable, dentro dela tem um botao, que seleciona uma Sala, ao clicar no botao, abre um Dialog, com os dados delas, eventualmente eu quero poder editar os dados da sala dentro do dialog, mas no momento meu Dialog nao mostra nada…

Segue o codigo .xhtml

<h:body>
		<h:outputStylesheet library="css" name="menuAdmin.css"/>	
		<h:form>
				<p:commandButton value="Menu Principal" action="/menuAdmin.xhtml" ajax="true"/>
		</h:form>
		<h:form id="formTable">	
				<p:dataTable var="sala" value="#{salaWizard.allSalas}" styleClass="dataTableSalas" >
									
					<p:column headerText="id">
						<h:outputText value="#{sala.id}"/>
					</p:column>
					<p:column headerText="bloco">
						<h:outputText value="#{sala.bloco}"/>
					</p:column>
					<p:column headerText="numero">
						<h:outputText value="#{sala.numero}"/>
					</p:column>
					<p:column headerText="tipo">
						<h:outputText value="#{sala.descricao}"/>
					</p:column>
					<p:column>
						<p:commandButton value="Editar Sala"  update=":dlgForm:editSala" action="#{salaWizard.pegarSala(sala.id)}" oncomplete="PF('salaEscolhida').show();">							
							<f:setPropertyActionListener target="#{salaWizard.selectClassroom}" value="#{sala}"/>
						</p:commandButton>	
					</p:column>				
				</p:dataTable>
		</h:form>	
		
		<h:form id="dlgForm">			
					<p:dialog header="Dados da Sala: " widgetVar="salaEscolhida" id="salaEscolhida">
						<p:panelGrid id="editSala">	
						
							<p:outputLabel value="teste"/>
							
							<h:outputText  value="bloco: *"/>
							<h:outputText value="#{salaWizard.bloco}"/>							
							
							<h:outputText value="Numero: *"/>
							
							
							<h:panelGrid columns="2" id="panelTipoSala">
								<p:outputLabel for="updateTipoSala" value="Tipo Sala:"/>
								<p:selectOneRadio id="updateTipoSala" value="#{salaWizard.tipo}" required = "true">
									<f:selectItem itemLabel="Laboratorio" itemValue="1"/>
									<f:selectItem itemLabel="Teorica" itemValue="2" />
								</p:selectOneRadio>
							</h:panelGrid>
							
							
						</p:panelGrid>
					</p:dialog>
			</h:form>		
		
		
	</h:body>

meu SalaWizarD(Bean):

package primefaces;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;

import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;



import model.Laboratorio;
import model.Sala;
import model.Teorica;
import dao.SalaDAO;
import Estado.Estado;
@ManagedBean
@ViewScoped
public class SalaWizard {
		
	private SalaDAO salaDAO;
	private int tipo;
	private int numero;
	private String bloco;
	private List<Sala> salas;
	private Sala selectClassroom;
	public SalaWizard() {
		// TODO Auto-generated constructor stub
	}
	
	

	public Sala getSelectClassroom() {
		return selectClassroom;
	}



	public void setSelectClassroom(Sala selectClassroom) {
		this.selectClassroom = selectClassroom;
		System.out.println("sucesso no set");
	}



	public int getNumero() {
		return numero;
	}

	public void setNumero(int numero) {
		this.numero = numero;
	}

	public String getBloco() {
		return bloco;
	}


	public void setBloco(String bloco) {
		this.bloco = bloco;
	}

	public List<Sala> getSalas() {
		return salas;
	}

	public void setSalas(List<Sala> salas) {
		this.salas = salas;
	}


	public int getTipo() {
		return tipo;
	}

	public void setTipo(int tipo) {
		this.tipo = tipo;
	}

	public SalaDAO getSalaDAO() {
		return salaDAO;
	}

	public void setSalaDAO(SalaDAO salaDAO) {
		this.salaDAO = salaDAO;
	}
	
	public void addSala(){
		Sala sala = null;
		salaDAO = new SalaDAO();
		sala = salaDAO.getSala(bloco, numero);
		try{
			System.out.println("testando se Sala já cadastrada");
			if(sala == null){
				System.out.println("Sala Null");
				if(tipo==2){			
					sala = new Teorica(bloco,numero);			
					salaDAO.save(sala);	
					addMessage("Sala Teorica cadastrada com sucesso");
					//return "Teorica Adicionada com Sucesso";			
				}else{
					if(tipo==1){
						sala = new Laboratorio(bloco,numero);				
						salaDAO.save(sala);	
						addMessage("Laboratorio Cadastrado com sucesso");
					//	return "Laboratorio Adicionada com Sucesso";
					}			
				}
			}
		}catch(Exception e){
				System.out.println("Sala já cadastrada");
				addMessage("Erro ao cadastrar Sala");
				Logger.GeradorLog.loggerFull.log(Level.SEVERE,"Erro ao ADD Sala ", e);				
		}
		
	}
	
	public String removeSala(){
		System.out.println("entrando no remove sala");
		Sala sala = null;
		try{
			System.out.println("instanciando");
			salaDAO = new SalaDAO();
			System.out.println("entrando no try");
			sala = salaDAO.getSala(bloco, numero);
			System.out.println(sala);
			salaDAO.delete(sala);
			addMessage("Sala Removida Com Sucesso");
			//addMessage("Removido com Sucesso");
			return "Removido com Sucesso";
		}catch(Exception e){
			System.out.println(e);
			addMessage("Nao foi removido, tente novamente");
			return "Nao foi removido";
		}
		
	}
	public String getTipoSala(){
		if(tipo==1){
			return "Laboratorio";
		}
		if(tipo==2){
			return "Teorica";
		}
			return "Invalido";
	}
	
	public List<Sala> getAllSalas(){
		salas = new ArrayList<Sala>();
		salaDAO = new SalaDAO();
		salas = salaDAO.getAll();
		return salas;
	}
	public String getMenuAdmin(){
		return "menuAdmin.xhtml";
	}
	

	
	 public void addMessage(String msg) {
		 	FacesContext context = FacesContext.getCurrentInstance();	        
	       context.addMessage(null, new FacesMessage("Resultado", msg) );	       
	 }
	 
	 public Sala pegarSala(int id){
		 salaDAO = new SalaDAO();
		 try{
			 Sala sala = salaDAO.getById(id);
			 setBloco(sala.getBloco());
			 setNumero(sala.getNumero());
			// System.out.println("chegou if");
			 if(sala.getDescricao().equals("Laboratorio")){
				// System.out.println("dentro if");
				 setTipo(1);
			 }else{
				 System.out.println("dentro else");
				 if(sala.getDescricao().equals("Teorica"))
				//	 System.out.println("dentro if do else");
					 setTipo(2);
			 }
			// System.out.println("saiu do if");
			 System.out.println("sucesso ao pegar a sala");
			 System.out.println(bloco);
			 System.out.println(numero);
		// System.out.println(sala.getDescricao());
			
			 System.out.println(tipo);
			 System.out.println(getTipoSala());
			 return sala;
		 }catch(Exception e){			 
			 System.out.println("Erro ao pegarSala"+e);	
			 return null;
		 }		
	 }
	
}

Olá felipezad, use apenas um form para mostrar os dados, não é necessário utilizar vários.

mas eu coloco tanto o DataTable e Dialog dentro do mesmo form ?

eu estava me baseando na resposta deste topico

pois acredito que era um problema semelhante ao meu.

Sim, coloque os dois no mesmo form.

Coloque também process="@form" no seu commandButton do dataTable para teste.

tentei essas sugestões, mas ainda continua em branco dentro do meu dialog.
Realmente, estranho que nem um Label que foi colocado como teste aparece dentro.

Tenta colocando a dlgForm dentro do dialog, ai no commandButton você chama o dialog e atualiza o form.

Umas observações: você não precisa do método pegarSala pra recuperar a sala no Banco, sendo que você já está passando a sala pelo setPropertyActionListener .
O managedBean só precisa de get/set pros objetos que você vai usar na tela, então não precisa deles pro salaDAO.

Tente usar update="@form" no botão do dataTable e veja se a sua variável salaWizard.selectClassroom foi populada.

Um problema foi solucionado, dentro do Dialog, agora aparece os Output, oque falta era por o
<p:panelGrid> dentro de um <p:panel>

Porém ainda estou com o problema, de não conseguir recuperar os dados de dataTable, mesmo colocando dentro do form=“formTable”;

Segui as dicas de colocar update="@form"

mas ainda ficou na mesma.

O seu método action="#{salaWizard.pegarSala(sala.id)}" é desnecessário, seria melhor você tirar esse método pois o código:

já leva os valores da linha selecionada.

Mas vi que você faz alguns tratamentos nesse método, então deixa.

Tem muitos conceitos que você deve aprender de JSF, é desnecessário retornar uma sala no método pegarSala, você deve entender como funciona o JSF, os beans estão ligados com a página, se os dados da página forem mudados, o objeto do seu ManagedBean também será mudado.

Troque seu value do dialog para:

sucesso ! muito obrigado a vocês dois que me ajudaram ! juntando tudo oque vocês passaram funcionou:

a dataTable atualizou depois de um F5 e estou muito agradecido !
com certeza colegas vou estudar mas no momento estou com este trabalho para entregar o mais rapido possivel.

\o/ Pode fechar já !

Basta colocar update=":formTable" no seu botão de atualiza sala.

Legal felipezad, fico feliz em saber que deu certo. Você mesmo que muda o tópico para resolvido, é só editar seu tópico e colocar [RESOLVIDO].