Primefaces dataTable dentro do dialog

8 respostas
R

Quero exibir um dataTable dentro de um dialog.

A sequencia funciona assim:

1#) Clicamos num commandButton que está dentro de um dataTable! Este clique levanta o dialog
2#) No dialog, a List nao é exibida!(q sao os itens do “commandButton”)! Porém ela é carregada n BB.

Versoes:
Prime: 3.0
Mojarra: 2.1.3

<f:view>

	 <p:panel>
		<h:form id="gavetaForm" >
			// campos para criar uma gaveta
		</h:form>
	
	 </p:panel>

	 
	 <h:form id="listagavetas">
		<p:dataTable value="#{gavetaBean.gavetaLista}" var="gaveta" rowIndexVar="index" scrollHeight="350" id="gavetaListarTabela"  >
	
			//algumas colunas(lista os dados salvos do id="gavetaForm")
	
	        <p:column style="width:40px">
	        
	                //chamo o meu dialog
					<p:commandButton id="selectButton" onclick="listagavetaDocumentos.show()" icon="ui-icon-search" title="View" 
	                	 action="#{gavetaBean.gavetaSelecionado}" update="dialoggavetaDocumentos:gavetaDocumentosListarTabela">
	                	
	                	<f:setPropertyActionListener target="#{gavetaBean.editado}" value="#{gaveta}" />
	                </p:commandButton>
	                
	        </p:column>				
	
		</p:dataTable>
	
	 </h:form>

 	//removi o form devido o post da anddi [url]http://www.guj.com.br/java/221055-primefaces-erro-com-pdatatable-em-um-pdialog-resolvido[/url] 
	<p:dialog id="dialoggavetaDocumentos" widgetVar="listagavetaDocumentos" modal="true" hideEffect="true" 
					showEffect="true" width="1300" height="450" header="Documentos do gaveta">
	
		<h:form id="dialogFormSalvarDocumentos" >
             //salvar documentos de uma caixa (o salvar funciona)

		</h:form>

		
		//essa listagem nao funciona! o "grid" fica vazio! E no método get do gavetaDocumentosLista ele está trazendo os dados
		<p:dataTable emptyMessage="sem documentos" value="#{gavetaBean.gavetaDocumentosLista}" var="gavetaDocumentosLista" rowIndexVar="indexLD" scrollHeight="350" id="gavetaDocumentosListarTabela" >
			
			<f:facet name="header">Documentos</f:facet>
			
			<h:column>
				<f:facet name="header">#</f:facet>
				<h:outputText value="#{indexLD}" />
			</h:column>


			
		</p:dataTable>

	</p:dialog>
</f:view>

método que retorna o List

public List<GavetaDocumentos> getGavetaDocumentosLista() {
		GavetaDocumentosRN gavetaDocumentosRN = new GavetaDocumentosRN();
		ContextoBean	contextoBean = new ContextoBean();
		
		
	
		this.gavetaDocumentos.setCliente(contextoBean.getUsuarioLogado().getCliente());
		this.gavetaDocumentos.setGaveta(this.editado.getIdGaveta());
		
		List<GavetaDocumentos> ld = gavetaDocumentosRN.listar(this.gavetaDocumentos);
		
		for (GavetaDocumentos gavetaDocumento:ld){
			//ok!!
			System.out.println(gavetaDocumento.getPrestador().getCodigoPrestador()+"\n");
		}
		
		return ld;
		
	}

Onde está o erro?

Obrigado.

8 Respostas

H

Coloca seu dataTable dentro de um form, e no update do botão que abre a dialog você da update nesse form.

R

nao rolou!
porém a msg. do dataTable do emptyMessage apareceu! Só que o bb está funcionando!

tentei dessas formas:

update="dialoggavetaDocumentos:formListarDocumentos"
update="formListarDocumentos"
<p:dialog id="dialoggavetaDocumentos" widgetVar="listagavetaDocumentos" modal="true" hideEffect="true" 
	showEffect="true" width="1300" height="450" header="Documentos do gaveta">
	
	<br />
	
	&lt;h:form id="formListarDocumentos"&gt;
		&lt;p:dataTable emptyMessage="sem documentos" value="#{gavetaBean.gavetaDocumentosLista}" var="gavetaDocumentosLista" rowIndexVar="indexLD" scrollHeight="350" id="gavetaDocumentosListarTabela" &gt;

obrigado.

H

eh mano, no seu action="#{gavetaBean.gavetaSelecionado}" c ta chamadno o me´todo get.

tira isso e tenta. e deixa que o próprio get faça a pesquisa.

R

Olá Jakefrog,

Nao funcionou.

Segue todo o xhtml.

obrigado.

implementei o lazy no primeiro dataTable, isto está funcionando!
primefaces 3.2(mesmo “erro” q tinha na 3.0)

porém a lista de documentos não é exibida no segundo dataTable.

no update, tentei com o dialog:form:dataTable, apenas o form ou até mesmo só o dataTable. Também removi o form para testar.

Quando a gaveta possui documentos ele não mostra a msg do emptyMessage!

&lt;p:panel id="pnl" header="Gaveta" toggleable="true" closable="false" toggleSpeed="500" closeSpeed="2000" widgetVar="panel"&gt;

	&lt;h:form id="gavetaForm" &gt;
	
		&lt;p:growl id="growlMensagensEdicao" /&gt;
		
		&lt;p:focus context="gavetaForm" /&gt;
		
		&lt;h:inputHidden value="#{gavetaBean.editado.idGaveta}" /&gt;
		
		&lt;h:panelGrid columns="5"&gt;
			&lt;h:outputText value="Numero Gaveta" for="numeroGaveta" /&gt;
			&lt;h:outputText value="Controle" for="controle" /&gt;
			&lt;h:outputText value="Finalizado" for="finalizado" /&gt;
			&lt;h:outputText value="Novo" for="novo" /&gt;
			&lt;h:outputText value="Salvar" for="salvar" /&gt;

			&lt;p:inputText value="#{gavetaBean.editado.numeroGaveta}" id="numeroGaveta"&gt;
											
			&lt;/p:inputText&gt;
				
			&lt;p:selectOneMenu value="#{gavetaBean.editado.controle}" id="controle"&gt;
				&lt;f:selectItems value="#{gavetaBean.controleList4Select}" /&gt;
			&lt;/p:selectOneMenu&gt;
										
			&lt;p:selectBooleanCheckbox value="true" id="finalizado" /&gt;
			&lt;p:commandButton id="novo" value="Novo" action="#{gavetaBean.novo}" process="@this" update="gavetaForm" /&gt;
			&lt;p:commandButton id="salvar" value="Salvar" action="#{gavetaBean.salvar}" process="@form" update=":gavetaForm :listaGavetas:gavetaListarTabela" /&gt;
			
		&lt;/h:panelGrid&gt;
	
	&lt;/h:form&gt;	
	
&lt;/p:panel&gt;

<br />

&lt;h:form id="listaGavetas"&gt;

	&lt;p:dataTable value="#{gavetaBean.lazyModel}" var="gaveta" rowIndexVar="index" scrollHeight="350" id="gavetaListarTabela"  dynamic="true"
					selectionMode="single"  emptyMessage="Sem gavetas" rows="10" selection="#{gavetaBean.editado}"&gt;
		&lt;p:ajax event="rowSelect" listener="#{gavetaBean.onRowSelect}" update=":dialogGavetaDocumentos" oncomplete="listaGavetaDocumentos.show()" /&gt;  
		
		&lt;f:facet name="header"&gt;Gavetas&lt;/f:facet&gt;

		&lt;p:column&gt;
			&lt;f:facet name="header"&gt;#&lt;/f:facet&gt;
			&lt;h:outputText value="#{index+1}" /&gt;
		&lt;/p:column&gt;
		
		&lt;p:column&gt;
			&lt;f:facet name="header"&gt;#&lt;/f:facet&gt;
			&lt;h:outputText value="#{gaveta.numeroGaveta}" /&gt;
		&lt;/p:column&gt;

	&lt;/p:dataTable&gt;			

&lt;/h:form&gt;

&lt;p:dialog id="dialogGavetaDocumentos" widgetVar="listaGavetaDocumentos" modal="true" hideEffect="true" 
	showEffect="true" width="1300" height="450" header="Documentos: #{gavetaBean.editado.numeroGaveta}"&gt;
	
	<br />
	
	&lt;h:form id="formListarDocumentos"&gt;	
		&lt;p:dataTable emptyMessage="sem documentos" value="#{gavetaBean.gavetaDocumentosLista}" var="gavetaDocumentosLista" rowIndexVar="indexLD" scrollHeight="350" id="gavetaDocumentosListarTabela"  &gt;
			
			&lt;f:facet name="header"&gt;Documentos&lt;/f:facet&gt;
			
			&lt;h:column&gt;
				&lt;f:facet name="header"&gt;#&lt;/f:facet&gt;
				&lt;h:outputText value="#{indexLD}" /&gt;
			&lt;/h:column&gt;	
			
		&lt;/p:dataTable&gt;
	
	&lt;/h:form&gt;			
	
&lt;/p:dialog&gt;

bb q lista os documentos:

public List&lt;GavetaDocumentos&gt; getGavetaDocumentosLista() {
		GavetaDocumentosRN gavetaDocumentosRN = new GavetaDocumentosRN();
		ContextoBean	contextoBean = new ContextoBean();
		
		
	
		this.gavetaDocumentos.setCliente(contextoBean.getUsuarioLogado().getCliente());
		this.gavetaDocumentos.setGaveta(this.editado.getIdGaveta());
		
		List&lt;GavetaDocumentos&gt; ld = gavetaDocumentosRN.listar(this.gavetaDocumentos);
		
		for (GavetaDocumentos gavetaDocumento:ld){
			//ok!!
			System.out.println(gavetaDocumento.getPrestador().getCodigoPrestador()+"\n");
		}
		
		return ld;
		
	}






A

e se vc tirar do p:dialog essa p:dataTable funciona?

R

oi Andii.

Obrigado.

Também não.
Notei que no método dentro do MB, não estava atribuindo o retorno à propriedade:

public List&lt;GavetaDocumentos&gt; getGavetaDocumentosLista() {

                ?
		?
                ?

		return this.gavetaDocumentosLista = ld;
		
	}

porém a dataTable mesmo fora do dialog não apresenta a lista.

R

Andii e Jakefrog.

Obrigado pela ajuda, o questionamento de vocês me ajudaram na solução do bug deste código.

Dentro da dataTable contido no dialog estava usando o h:column! Troquei para o p:column e está tudo funcionando agora!
Muito obrigado.

A

puts… pior que eu nem vi esse detalhe, e já passei por isso uma vez e nem lembrava :S rs

Criado 23 de março de 2012
Ultima resposta 25 de mar. de 2012
Respostas 8
Participantes 3