Primafaces usando dataTable com Dialog

Java

29/10/2013

Bom dia estou com dúvida de como realizar cadastro no primefaces utilizando dataTable e dialog,tenho cadastro de pessoa e quero cadastrar os dependentes, dentro do dataTable tenho coluna com botão adicionar dependente ao clicar nele ele chama um Dialog. Ao usar dialog quero ver qual é a melhor forma de passar a referencia de pessoa para dependente para eu poder cadastrar vários ao mesmo tempo essa é minha dúvida açguém pode me ajudar?


att,
Adriano de Aguiar
Adriano Aguiar

Adriano Aguiar

Curtidas 0

Respostas

Roselito Silva

Roselito Silva

29/10/2013

Eu faço assim:

1- no managed bean, tenho um atributo pessoa;
2- no botão do dataTable, chamo um método do bean e passo a pessoa selecionada, por exemplo, #{controlador.dependentes(item)}, onde item é a linha do dataTable, que também é do tipo pessoa.
3- no dialog, uso sempre #{controlador.pessoa.atributo} como value dos inputs

Daí para frente é só preencher o formulário do dialog, gravar e atualizar a tabela depois de gravar.

Espero que ajude.
GOSTEI 0
Adriano Aguiar

Adriano Aguiar

29/10/2013

dessa forma já fiz eu preciso, gravar vários registro dentro Dialog depois sim atualizar dataTable, mas consigo fazer somente um registro ai ele perde a referência!

att
GOSTEI 0
Eduardo Pessoa

Eduardo Pessoa

29/10/2013

Eu faço assim:

1- no managed bean, tenho um atributo pessoa;
2- no botão do dataTable, chamo um método do bean e passo a pessoa selecionada, por exemplo, #{controlador.dependentes(item)}, onde item é a linha do dataTable, que também é do tipo pessoa.
3- no dialog, uso sempre #{controlador.pessoa.atributo} como value dos inputs

Daí para frente é só preencher o formulário do dialog, gravar e atualizar a tabela depois de gravar.

Espero que ajude.


fiz algo parecido com JSF, mas acompanhando video aulas.
GOSTEI 0
Adriano Aguiar

Adriano Aguiar

29/10/2013

vc tem essa vídeo aula?
GOSTEI 0
Roselito Silva

Roselito Silva

29/10/2013

O escopo do seu bean é session, ou pelo menos view? Se você tem um atributo no bean que guarda o objeto que veio do dataTable, não perde a referência. Só no caso de escopo Request...
GOSTEI 0
Adriano Aguiar

Adriano Aguiar

29/10/2013

vou fazer teste com session, se eu usar Request tem forma de realizar essa operação sem usar sessão!

att,
GOSTEI 0
Roselito Silva

Roselito Silva

29/10/2013

Você não precisa trabalhar com a sessão, ou seja, ficar escrevendo e lendo parâmetros na sessão.

Um bean com @SessionScoped mantém os valores dos atributos até você fechar o navegador. Já o @ViewScoped mantém até você fechar a página. E o @RequestScoped perde tudo logo depois de um submit...

Portanto, se você tiver um atributo pessoa do tipo Pessoa instanciado no seu bean @ViewScoped, vai poder pegar o valor dele enquanto estiver na mesma página.
GOSTEI 0
Eduardo Pessoa

Eduardo Pessoa

29/10/2013

vc tem essa vídeo aula?


essa video é da devmedia, é um otimo curso.
GOSTEI 0
Adriano Aguiar

Adriano Aguiar

29/10/2013

Boa tarde consegui fazer, mas surgiu novo problema como editar dependente dentro dialog montei um datatable que clicar botão editar e já selecionar os campo do form que está também denro do dialog!

att
GOSTEI 0
Eduardo Pessoa

Eduardo Pessoa

29/10/2013

pode postar o codigo ou a imagem?
GOSTEI 0
Adriano Aguiar

Adriano Aguiar

29/10/2013

Esse código estou tentando colocar um dialog dentro do outro!

<p:dialog widgetVar="dialogSolicitacao" id="dlgsolicitacao"
header="Solicitação" modal="false" showEffect="clip"
hideEffect="clip" minWidth="800">
<h:form id="form">


<p:panel header="Cadastro de Pessoas que residem neste imóvel!"
styleClass="panelprincipal" style="width: 850px;">
<p:panel header="Pessoa" id="morad"
style="text-align: left; width: 800px;">
<p:messages id="messages" />
<p:panelGrid columns="2">

<h:outputLabel value="Classificação idade!" id="classificacao" />


<p:selectOneMenu value="#{pessoaBean.morador.classificacao}"
required="true" requiredMessage="Selecione uma das opções!">
<f:selectItem itemValue="" itemLabel="Selecione..." />
<f:selectItems value="#{pessoaBean.listaItem}" var="pessoa"
itemLabel="#{pessoaBean.descricao}" itemValue="#" />

</p:selectOneMenu>



<h:outputText value="Quantidade" id="quantidade" />
<p:inputText value="#{pessoaBean.morador.quantidade}" size="50"
required="true"
requiredMessage="Informe a Quantidade de Morador!"></p:inputText>

</p:panelGrid>
</p:panel>
<f:facet name="footer">
<p:commandButton value="Salvar" action="#{pessoaBean.salvar}"
update="form"></p:commandButton>
</f:facet>
</p:panel>
</h:form>

</p:dialog>
<p:dialog widgetVar="dialogVeiculo" id="dlgsolicitacaoVeiculo"
header="Cadastro de Veículo" modal="false" showEffect="clip"
hideEffect="clip" minWidth="800">
<h:form id="veiculo">
<p:panel header="Cadastro de Veículo!" styleClass="panelprincipal"
style="width: 850px;">
<p:panel header="Cliente" id="vei"
style="text-align: left; width: 800px;">
<p:messages id="messages" />
<p:panelGrid columns="2">

<h:outputText value="Marca" id="marca" />
<p:inputText value="#{veiculoBean.veiculo.marca}" size="50"
required="true" requiredMessage="Informe a marca do veículo"
label="marca"></p:inputText>
<h:outputText value="Tipo de Veículo" id="tipo" />
<p:inputText value="#{veiculoBean.veiculo.tipo}" size="50"
required="true" requiredMessage="Informe a tipo de veículo"
label="tipo"></p:inputText>
<h:outputText value="Placa" id="placa" />
<p:inputText value="#{veiculoBean.veiculo.placa}" size="50"
required="true" requiredMessage="Informe a tipo de veículo"
label="placa"></p:inputText>
<h:outputText value="Classis" id="classi" />
<p:inputText value="#{veiculoBean.veiculo.chassi}" size="50"
required="true" requiredMessage="Informe o classis" for="classi"></p:inputText>
</p:panelGrid>
</p:panel>
<f:facet name="footer">
<p:commandButton value="Salvar" action="#{veiculoBean.salvar}"
update=":listaV veiculo"></p:commandButton>
</f:facet>

</p:panel>




</h:form>
<h:form id="listaV">
<p:dataTable id="dataTable" var="m" value="#{veiculoBean.lista}"
scrollable="false" paginator="true" rows="10" scrollHeight="400"
paginatorTemplate=" "
rowsPerPageTemplate="5,10,15">
<f:facet name="header">
Lista de Moradores
</f:facet>

<p:column>
<f:facet name="header">
<h:outputText value="Codigo" />
</f:facet>
<h:outputText value="#{m.id}" />
</p:column>

<p:column>
<f:facet name="header">
<h:outputText value="Marca" />
</f:facet>
<h:outputText value="#{m.marca}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Tipo de Veículo" />
</f:facet>
<h:outputText value="#{m.tipo}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Placa" />
</f:facet>
<h:outputText value="#{m.placa}" />
</p:column>
<p:column headerText="Editar">
<f:facet name="header">Editar</f:facet>
<h:commandLink action="#{veiculoBean.doUpdateVeiculos(m)}"
oncomplete="dialogEditarVeiculo.show()">
<h:graphicImage library="img" name="btnEditar.png"
style="border:0;"></h:graphicImage>

</h:commandLink>
</p:column>
</p:dataTable>
</h:form>
<p:dialog widgetVar="dialogEditarVeiculo" id="dlgsolicitacaoVeicu"
header="Alterar Veiculo" modal="false" showEffect="clip"
hideEffect="clip" minWidth="800">
<h:form id="formAlt">
<p:panel header="Cadastro de Veículo!" styleClass="panelprincipal"
style="width: 850px;">
<p:panel header="Cliente" id="vei"
style="text-align: left; width: 800px;">

<p:messages id="messages" />
<p:panelGrid columns="2">

<h:outputText value="Marca" id="marcaEditar" />
<p:inputText value="#{veiculoBean.veiculo.marca}" size="50"
required="true" requiredMessage="Informe a marca do veículo"
label="marcaEditar"></p:inputText>
<h:outputText value="Tipo de Veículo" id="tipoEditar" />
<p:inputText value="#{veiculoBean.veiculo.tipo}" size="50"
required="true" requiredMessage="Informe a tipo de veículo"
label="tipoEditar"></p:inputText>
<h:outputText value="Placa" id="placaEditar" />
<p:inputText value="#{veiculoBean.veiculo.placa}" size="50"
required="true" requiredMessage="Informe a tipo de veículo"
label="placaEditar"></p:inputText>
<h:outputText value="Classis" id="classiEditar" />
<p:inputText value="#{veiculoBean.veiculo.chassi}" size="50"
required="true" requiredMessage="Informe o classis"
for="classiEditar"></p:inputText>
</p:panelGrid>
</p:panel>
<f:facet name="footer">
<p:commandButton value="Salvar" action="#{veiculoBean.salvar}"></p:commandButton>
</f:facet>
</p:panel>
</h:form>

</p:dialog>
</p:dialog>
GOSTEI 0
Roselito Silva

Roselito Silva

29/10/2013

Dialogs aninhados não fazem muito sentido...
GOSTEI 0
Adriano Aguiar

Adriano Aguiar

29/10/2013

qual e melhor forma de editar dependente, cadastrado no dialog?
GOSTEI 0
Adriano Aguiar

Adriano Aguiar

29/10/2013

qual e melhor forma de editar dependente, cadastrado no dialog?
GOSTEI 0
Roselito Silva

Roselito Silva

29/10/2013

Sua idéia está certa: de dentro de um dialog, você pode chamar outro. O que não está correto é codificar os dialogs aninhados. Eles devem ser codificados um após o outro. Inclusive você pode colocar em um dialog uma expressão EL que se refere a um objeto de outro dialog, sem problemas.
GOSTEI 0
Jose Junior

Jose Junior

29/10/2013

Olá Pessoal, boa noite,

ressucitei o post porque estou com o mesmo problema e a solução dada aqui para mim não resolveu. As p:dialog simplesmente não são exibidas.

Não se assustem com a tristeza que é o código. Estou aprendendo essas tecnologias há 2 semanas. Tenham piedade.

Peço humildemente e encarecidamente aos experts de plantão, no dia do programador, para me ajudarem. Fico-lhes muitíssimo agradecido.

Trata-se de um pequeno sistema CRUD, com Hibernate, JSF 2, com Apache Tomcat 6 e JDK 1.6. Estas configurações não podem ser alteradas.

Seguem os códigos:

package controller;  
  
import dao.ImovelDao;  
  
import java.io.Serializable;  
import java.util.List;  
import javax.faces.bean.ManagedBean;  
import javax.faces.bean.ViewScoped;  
import javax.faces.model.DataModel;  
import javax.faces.model.ListDataModel;  
  
  
  
  
import model.Imovel;  
  
@ManagedBean @ViewScoped  
public class ImovelBean implements Serializable {  
    private ImovelDao imovelDao;  
    private Imovel imovel = new Imovel();  
    private DataModel<Imovel> imoveis;  
  
    public void novo() {  
        imovel = new Imovel();  
    }  
  
    public String inserir() {  
        String resultado = "falha";  
        imovelDao = new ImovelDao();  
        boolean retorno = imovelDao.inserir(imovel);  
  
        if (retorno) {  
            resultado = "imoveis";  
        }  
  
        return resultado;  
    }  
  
    public void selecionar() {  
        imovel = imoveis.getRowData();  
    }  
  
    public String alterar() {  
        String resultado = "falha";  
        imovelDao = new ImovelDao();  
        boolean retorno = imovelDao.alterar(imovel);  
  
        if (retorno) {  
            resultado = "imoveis";  
        }  
  
        return resultado;  
    }  
  
    public String remover() {  
        String resultado = "falha";  
        imovelDao = new ImovelDao();  
        boolean retorno = imovelDao.remover(imovel);  
  
        if (retorno) {  
            resultado = "imoveis";  
        }  
  
        return resultado;  
    }  
  
    public DataModel<Imovel> consultar() {  
        imovelDao = new ImovelDao();  
        List<Imovel> imovelList = imovelDao.listar();  
        imoveis = new ListDataModel<Imovel>(imovelList);  
        return imoveis;  
    }  
      
    public Imovel getImovel() {  
        return imovel;  
    }  
      
    public void setImovel(Imovel imovel) {  
        this.imovel = imovel;  
    }  
  
    public DataModel<Imovel> getImoveis() {  
        imovelDao = new ImovelDao();  
        List<Imovel> imovelList = imovelDao.listar();  
        imoveis = new ListDataModel<Imovel>(imovelList);  
        return imoveis;  
    }  
  
    public void setImoveis(DataModel<Imovel> imoveis) {  
        this.imoveis = imoveis;  
    }  
}  




<!DOCTYPE html>  
<html xmlns="http://www.w3.org/1999/xhtml"  
    xmlns:f="http://xmlns.jcp.org/jsf/core"  
    xmlns:h="http://xmlns.jcp.org/jsf/html"  
    xmlns:p="http://primefaces.org/ui">  
  
<h:head>  
    <title>Gerenciar Imóveis</title>  
</h:head>  
<h:body>  
    <div align="center">  
        <h:form id="formPrincipal">  
  
            <p:dataTable id="tabelaImoveis" var="lista" value="#{imovelBean.imoveis}"   
                 selectionMode="single" selection="#{imovelBean.imovel}"   
                 rowKey="#{lista.matriculaImovel}" >  
                 <p:ajax event="rowSelect" update=":formAlterar" />  
                <f:facet name="header">Gerenciador de Imóveis</f:facet>  
                <p:column headerText="Matrícula">  
                    <h<img src="http://javafree.uol.com.br/forum/images/smiles/icon_surprised.gif">utputText value="#{lista.matriculaImovel}" />  
                </p:column>  
                <p:column headerText="Endereço">  
                    <h<img src="http://javafree.uol.com.br/forum/images/smiles/icon_surprised.gif">utputText value="#{lista.enderecoImovel}" />  
                </p:column>  
                <p:column headerText="Valor do Imóvel">  
                    <h<img src="http://javafree.uol.com.br/forum/images/smiles/icon_surprised.gif">utputText value="#{lista.valorImovel}">  
                        <f:convertNumber type="currency" locale="pt_BR" />  
                    </h<img src="http://javafree.uol.com.br/forum/images/smiles/icon_surprised.gif">utputText>  
                </p:column>  
                <p:column headerText="Ações">  
                    <p:commandLink title="Alterar" update=":formAlterar:Alterar"  
                        oncomplete="dialogAlterar.show()" immediate="true">  
                        <p:graphicImage value="./imagens/editar.jpg" />  
                        <f:setPropertyActionListener target="#{imovelBean.imovel}"  
                            value="#" />  
                    </p:commandLink>  
                    <p:commandLink title="Excluir" update=":formExcluir:Excluir"  
                        oncomplete="confirmation.show()" immediate="true">  
                        <p:graphicImage value="./imagens/del.jpg" />  
                        <f:setPropertyActionListener target="#{imovelBean.imovel}"  
                            value="#" />  
                    </p:commandLink>  
                </p:column>  
  
            </p:dataTable>  
            <p:commandButton value="Cadastrar" id="cadastrar"  
                oncomplete="dialogCadastrar.show()" />  
        </h:form>  
    </div>  
    <h:form id="formCadastrar">  
        <p:dialog header="Novo Registro" widgetVar="dialogCadastrar" modal="true">  
            <p:panelGrid id="panelCadastrar" columns="2">  
                <h<img src="http://javafree.uol.com.br/forum/images/smiles/icon_surprised.gif">utputText value="Matrícula" />  
                <p:inputText value="#{imovelBean.imovel.matriculaImovel}" />  
                <h<img src="http://javafree.uol.com.br/forum/images/smiles/icon_surprised.gif">utputText value="Endereço:" />  
                <p:inputText value="#{imovelBean.imovel.enderecoImovel}" />  
                <h<img src="http://javafree.uol.com.br/forum/images/smiles/icon_surprised.gif">utputText value="Valor:" />  
                <p:inputText value="#{imovelBean.imovel.valorImovel}" />  
            </p:panelGrid>  
            <p:commandButton value="Cadastrar"  
                actionListener="#{pessoaBean.cadastrar}"  
                update=":formPrincipal:tabelaImoveis"  
                oncomplete="dialogCadastrar.hide()" />  
        </p:dialog>  
    </h:form>  
    <h:form id="formAlterar">  
        <p:dialog header="Alterar Registro" widgetVar="dialogAlterar" modal="true" id="Alterar" dynamic="true">  
            <p:panelGrid id="panelAlterar" columns="2">  
                <h<img src="http://javafree.uol.com.br/forum/images/smiles/icon_surprised.gif">utputText value="Matrícula" />  
                <p:inputText value="#{imovelBean.imovel.matriculaImovel}" />  
                <h<img src="http://javafree.uol.com.br/forum/images/smiles/icon_surprised.gif">utputText value="Endereço:" />  
                <p:inputText value="#{imovelBean.imovel.enderecoImovel}" />  
                <h<img src="http://javafree.uol.com.br/forum/images/smiles/icon_surprised.gif">utputText value="Valor:" />  
                <p:inputText value="#{imovelBean.imovel.valorImovel}" />  
            </p:panelGrid>  
            <p:commandButton value="Alterar"  
                actionListener="#{imovelBean.alterar}"  
                update=":formPrincipal:tabelaImoveis"  
                oncomplete="dialogAlterar.hide()" />  
        </p:dialog>  
    </h:form>  
    <h:form id="formExcluir">  
        <p:confirmDialog id="Excluir"  
            message="Confirma exclusão do registro do imóvel de matrícula #{imovelBean.imovel.matriculaImovel}?"  
            header="Excluir" severity="alert" widgetVar="confirmation">  
              
            <p:commandButton id="confirm" value="Sim"  
                oncomplete="confirmation.hide()"  
                actionListener="#{imovelBean.excluir}"  
                update=":formPrincipal:tabelaImoveis" />  
            <p:commandButton id="decline" value="Não"  
                onclick="confirmation.hide()" type="button" />  
        </p:confirmDialog>  
    </h:form>  
</h:body>  
</html>
GOSTEI 0
POSTAR