Fórum Herança Single Table #411913
25/01/2012
0
Jose Boas
Curtir tópico
+ 0Posts
25/01/2012
Davi Costa
Vc pode crir uma classe pai Pessoa, e as duas filhas extendendo de Pessoa(classe tal que terá apenas os campos comuns aos dois tipos de Pessoa) e os filhos PessoaFisica e PessoaJuridica herdaria os métodos e vc faria um bom uso da OO.
Ou criar uma Pessoa e nela teria um atributo que definiria se é PessoaFisica ou PessoaJuridica, mas caso tenha campos com características diferentes de um para o outro te daria problemas...
Melhor do meu ponto de vista é a primeira opção.
att Davi
Gostei + 0
25/01/2012
Jose Boas
Eu vou cadastrar eu não sei se será física ou jurídica até o selecinar, mas daí no meu xhtml eu terei que colocar nos campos em comum a Pessoa e nos campos específicos PessoaJuridica ou/e Fisica .
Veja como eu fiz.
xhml
<h:inputHidden value=#{entidadeBean.selecionada.codigo}/>
<h:panelGrid columns=3 id=linha1>
<h:outputLabel value=Data for=data/>
<h:outputLabel value=Nome for=nome/>
<h:outputLabel value=Apelido for=apelido/>
<p:calendar id=data value=#{entidadeBean.selecionada.dataCadastro} mode=popup showOn=button popupIconOnly=true pattern=dd/MM/yyyy size=15/>
<p:inputText id=nome value=#{entidadeBean.selecionada.nome} required=true size=55 />
<p:inputText id=apelido value=#{entidadeBean.selecionada.apelido} required=true size=26 />
</h:panelGrid>
<h:panelGrid columns=3 id=linha2 rendered=#{entidadeBean.selecionada.tipoEntidade==1}>
<h:outputLabel value=CPF for=cpf/>
<h:outputLabel value=Rg for=rg/>
<h:outputText></h:outputText>
<p:inputMask id=cpf value=#{entidadeBean.selecionadaFisica.cpf} required=true size=18 mask=999.999.999-99 />
<p:inputText id=rg value=#{entidadeBean.selecionadaFisica.rg} required=true size=15/>
</h:panelGrid>
<h:panelGrid columns=3 id=linha3 rendered=#{entidadeBean.selecionada.tipoEntidade==2}>
<h:outputLabel value=CNPJ for=cnpj/>
<h:outputLabel value=Incrição Estadual for=inscricaoEstadual/>
<h:outputText></h:outputText>
<p:inputMask id=cnpj value=#{entidadeBean.selecionadaJuridica.cnpj} required=true size=18 mask=99.999.999/9999-99 />
<p:inputText id=inscricaoEstadual value=#{entidadeBean.selecionadaJuridica.inscricaoEstadual} required=true size=15/>
</h:panelGrid>
<h:panelGrid columns=3 id=linha4>
<h:outputLabel value=Endereço for=endereco/>
<h:outputLabel value=Nº for=numero/>
<h:outputLabel value=Cidade for=cidade/>
<p:inputText id=endereco value=#{entidadeBean.selecionada.endereco} required=true size=64/>
<p:inputText id=numero value=#{entidadeBean.selecionada.numero} size=6/>
<p:inputText id=cidade value=#{entidadeBean.selecionada.cidade} required=true size=29/>
</h:panelGrid>
<h:panelGrid columns=3 id=linha5>
<h:outputLabel value=Bairro for=bairro/>
<h:outputLabel value=Complemento for=complemento/>
<h:outputLabel value=CEP for=cep/>
<p:inputText id=bairro value=#{entidadeBean.selecionada.bairro} required=true size=25 />
<p:inputText id=complemento value=#{entidadeBean.selecionada.complemento} required=true size=10 />
<p:inputMask id=cep value=#{entidadeBean.selecionada.cep} required=true size=10 mask=99999-999/>
</h:panelGrid>
Gostei + 0
25/01/2012
Davi Costa
vc separa os campos conforme o tipo de pessoa, se for de um tipo mostre seus campos, se for de outro mostre outros campos.
Ou então no bean vc verifica se objeto é de determinado tipo e no bean vc cria mais dois objeto, um pessoaFisicaSelecionada e um pessoaJuridicaSelecionada (cria getters e setters) e o objeto selecionada passa seu valor para a pessoa específica:
if(selecionada instanceOf PessoaFisica){
pessoaFisicaSelecionada = (PessoaFisica) selecionada;
}.....
e na sua página vc já coloca os campos para pessoa específica, por exemplo:
<p:inputText id=endereco value=#{entidadeBean.pessoaFisicaSelecionada.endereco} required=true size=64/>
só que em cima vc vai ter que usar o atributo rendered para vc se selecionada é PessoaFisica, talvez até te ajude criar um boolean global do seu Bean para tratar isso, se é PessoaFisica ele recebe true, se é PessoaJuridica recebe false, ai vc pega esse boolean e vai te ajudar bastante na página, ai vc o trta no bean do seguinte modo:
if(selecionada instanceOf PessoaFisica){
pessoaFisicaSelecionada = (PessoaFisica) selecionada;
auxTipoPessoa = true;
}else{
pessoaJuridicaSelecionada = (PessoaJuridica) selecionada;
auxTipoPessoa = false;
}
adapta para sua solução
att Davi
Gostei + 0
25/01/2012
Jose Boas
Ex:
<h:panelGrid columns=3 id=linha3 rendered=#{entidadeBean.selecionada.tipoEntidade==2}>
<h:outputLabel value=Endereco for=endereco/>
<p:inputMask id=cnpj value=#{entidadeBean.selecionadaJuridica.endereco} required=true size=60/>
</h:panelGrid>
<h:panelGrid columns=3 id=linha3 rendered=#{entidadeBean.selecionada.tipoEntidade==1}>
<h:outputLabel value=Endereco for=endereco/>
<p:inputMask id=cnpj value=#{entidadeBean.selecionadaFisica.endereco} required=true size=60/>
</h:panelGrid>
Eu não sei se tem else no rendered, se tem não sei como fazer. Neste caso eu estou aplicando no panel grid, mas eu poderia aplicar em cada campo ?
Gostei + 0
25/01/2012
Jose Boas
Ex:
<h:panelGrid columns=3 id=linha3 rendered=#{entidadeBean.selecionada.tipoEntidade==2}>
<h:outputLabel value=Endereco for=endereco/>
<p:inputMask id=cnpj value=#{entidadeBean.selecionadaJuridica.endereco} required=true size=60/>
</h:panelGrid>
<h:panelGrid columns=3 id=linha3 rendered=#{entidadeBean.selecionada.tipoEntidade==1}>
<h:outputLabel value=Endereco for=endereco/>
<p:inputMask id=cnpj value=#{entidadeBean.selecionadaFisica.endereco} required=true size=60/>
</h:panelGrid>
Eu não sei se tem else no rendered, se tem não sei como fazer. Neste caso eu estou aplicando no panel grid, mas eu poderia aplicar em cada campo ?
Da um olhada no meu xhtml.
<h:inputHidden value=#{entidadeBean.selecionada.codigo}/>
<h:panelGrid columns=3 id=linha1>
<h:outputLabel value=Data for=data/>
<h:outputLabel value=Nome for=nome/>
<h:outputLabel value=Apelido for=apelido/>
<p:calendar id=data value=#{entidadeBean.selecionada.dataCadastro} mode=popup showOn=button popupIconOnly=true pattern=dd/MM/yyyy size=15/>
<p:inputText id=nome value=#{entidadeBean.selecionada.nome} required=true size=55 />
<p:inputText id=apelido value=#{entidadeBean.selecionada.apelido} required=true size=26 />
</h:panelGrid>
<h:panelGrid columns=3 id=linha2 rendered=#{entidadeBean.selecionada.tipoEntidade==1}>
<h:outputLabel value=CPF for=cpf/>
<h:outputLabel value=Rg for=rg/>
<h:outputText></h:outputText>
<p:inputMask id=cpf value=#{entidadeBean.selecionadaFisica.cpf} required=true size=18 mask=999.999.999-99 />
<p:inputText id=rg value=#{entidadeBean.selecionadaFisica.rg} required=true size=15/>
</h:panelGrid>
<h:panelGrid columns=3 id=linha3 rendered=#{entidadeBean.selecionada.tipoEntidade==2}>
<h:outputLabel value=CNPJ for=cnpj/>
<h:outputLabel value=Incrição Estadual for=inscricaoEstadual/>
<h:outputText></h:outputText>
<p:inputMask id=cnpj value=#{entidadeBean.selecionadaJuridica.cnpj} required=true size=18 mask=99.999.999/9999-99 />
Nos campos em comum eu uso o da pessoa mesmo.
Gostei + 0
25/01/2012
Davi Costa
Ai vc vai criar dois campos e rendered sempre vai ser um ao contrário do outro por isso sugeri um boolean pq ele nunca vai ser ao mesmo tempo true e false... um panel para true e um panel para false.
att Davi
Gostei + 0
28/01/2012
Jose Boas
ele dá um rendered novamente e o que esta dentro<p:InputText> do panel group fica nulo . Eu queria quando salvar não da um rendered nos panelgroup .
Gostei + 0
01/02/2012
Dyego Carmo
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)