Javafree
 Forum   Topics   Author   Post 
Frameworks, APIs e IDE's Tratamento ViewExpiredException thiago.ribeiro Boa noite pessoal, Estou seguindo um tutorial sobre como tratar a ViewExpiredException do JSF, porém não está dando certo. Fiz conforme o tutorial e mesmo assim não dá certo. Alguém poderia me ajudar a solucionar o problema? Utilizando as tecnologias: JSF, PrimeFaces. Classe JsfExceptionHandler [code]public class JsfExceptionHandler extends ExceptionHandlerWrapper{ private ExceptionHandler wrapped; public JsfExceptionHandler(ExceptionHandler wrapped) { this.wrapped = wrapped; } @Override public ExceptionHandler getWrapped() { return this.wrapped; } @Override public void handle() throws FacesException { Iterator<ExceptionQueuedEvent> events = getUnhandledExceptionQueuedEvents().iterator(); while (events.hasNext()) { ExceptionQueuedEvent event = events.next(); ExceptionQueuedEventContext context = (ExceptionQueuedEventContext) event.getSource(); Throwable exception = context.getException(); try { if(exception instanceof ViewExpiredException){ redirect("/"); } } finally { events.remove(); } } getWrapped().handle(); } private void redirect(String page){ try { FacesContext facesContext = FacesContext.getCurrentInstance(); ExternalContext externalContext = facesContext.getExternalContext(); String contextPath = externalContext.getRequestContextPath(); externalContext.redirect(contextPath + page); facesContext.responseComplete(); } catch (IOException e) { throw new FacesException(e); } } }[/code] Classe JsfExceptionHandlerFactory [code]public class JsfExceptionHandlerFactory extends ExceptionHandlerFactory{ private ExceptionHandlerFactory parent; public JsfExceptionHandlerFactory(ExceptionHandlerFactory parent) { this.parent = parent; } @Override public ExceptionHandler getExceptionHandler() { return new JsfExceptionHandler(parent.getExceptionHandler()); } }[/code] FacesConfig [code]<?xml version="1.0" encoding="UTF-8"?> <faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd" version="2.1"> <factory> <exception-handler-factory> br.com.r2.softcar.util.jsf.JsfExceptionHandlerFactory </exception-handler-factory> </factory> </faces-config>[/code] Quando inicio o Tomcat 7 aparece o seguinte erro: [code]GRAVE: Critical error during deployment: com.sun.faces.config.ConfigurationException: Factory 'javax.faces.context.ExceptionHandlerFactory' was not configured properly. at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:305) at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:219) at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:361) at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:216) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4937) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: javax.faces.FacesException: br.com.r2.softcar.util.jsf.JsfExceptionHandlerFactory at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:632) at javax.faces.FactoryFinder.getImplementationInstance(FactoryFinder.java:508) at javax.faces.FactoryFinder.access$400(FactoryFinder.java:138) at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:995) at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:342) at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:303) ... 12 more Caused by: java.lang.ClassNotFoundException: br.com.r2.softcar.util.jsf.JsfExceptionHandlerFactory at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:344) at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:620) ... 17 more jul 13, 2015 7:42:12 PM org.apache.catalina.core.StandardContext listenerStart GRAVE: Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener java.lang.RuntimeException: com.sun.faces.config.ConfigurationException: Factory 'javax.faces.context.ExceptionHandlerFactory' was not configured properly. at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:276) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4937) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: com.sun.faces.config.ConfigurationException: Factory 'javax.faces.context.ExceptionHandlerFactory' was not configured properly. at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:305) at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:219) at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:361) at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:216) ... 9 more Caused by: javax.faces.FacesException: br.com.r2.softcar.util.jsf.JsfExceptionHandlerFactory at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:632) at javax.faces.FactoryFinder.getImplementationInstance(FactoryFinder.java:508) at javax.faces.FactoryFinder.access$400(FactoryFinder.java:138) at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:995) at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:342) at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:303) ... 12 more Caused by: java.lang.ClassNotFoundException: br.com.r2.softcar.util.jsf.JsfExceptionHandlerFactory at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:344) at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:620) ... 17 more[/code] Desde já agradeço a ajuda de todos.
Frameworks, APIs e IDE's Mapeamento cliente como PF e/ou PF thiago.ribeiro Bom dia pessoal, Estou com uma dúvida sobre como fazer este mapeamento utilizando Hibernate/JPA. No meu sistema um cliente pode ser cadastrado como PF ou como PJ. Até o momento a estrutura está da seguinte forma: Abstract Pessoa PF extends Pessoa PJ extends Pessoa Cliente (possui PF pessoaFisica; e PJ pessoaJuridica;) Como devo mapear para que seja criada apenas a tabela Cliente com todos os dados da herança? Estou utilizando JSF 2.2, PrimeFaces 4, Hibernate 4.2, JPA. Desde já agradeço.
Frameworks, APIs e IDE's SelectOneRadio mantendo estado das validações thiago.ribeiro Bom dia pessoal, Estou tendo um problema em um aplicação que estou desenvolvendo utilizando JSF 2.2 + PrimaFaces 4.0. Tenho 1 SelectOneRadio para selecionar PF ou PJ em um cadastro de clientes, quando tento finalizar o cadastro sem preencher um campo obrigatório é mostrado as mensagens das validações correspondentes e se tento mudar a seleção do SelectOndeRadio novamente, ele mantém os campos em vermelho indicado anteriormente, ou seja, fica mantendo o contorno dos campos em vermelho (PF para PJ ou PJ para PF). Preciso que sempre que a seleção do Radio seja alterada, "zere" todas as validações. Desde já agradeço a ajuda de todos. Segue xhtml: [code] <p:panelGrid id="pngDadosCad" columns="4" style="width:100%" styleClass="semBorda"> <f:facet name="header">Dados Cadastrais</f:facet> <p:outputLabel id="lblPessoa" value="Pessoa:" /> <p:selectOneRadio id="radioPFPJ" value="#{cliBean.tipoPessoa}"> <f:selectItem itemLabel="Física" itemValue="true" /> <f:selectItem itemLabel="Jurídica" itemValue="false" /> <p:ajax update="@form" event="change" process="@this"/> </p:selectOneRadio> <p:outputLabel id="lblDataCad" value="Data de Cadastro:" /> <p:calendar id="dataCadPF" value="#{cliBean.pf.dataCadastro}" size="8" pattern="dd/MM/yyyy" rendered="#{cliBean.tipoPessoa}"> <f:convertDateTime pattern="dd/MM/yyyy" /> </p:calendar> <p:calendar id="dataCadPJ" value="#{cliBean.pj.dataCadastro}" size="8" pattern="dd/MM/yyyy" rendered="#{!cliBean.tipoPessoa}"> <f:convertDateTime pattern="dd/MM/yyyy" /> </p:calendar> <p:outputLabel id="lblStatusPF" value="Status:" for="cmbStatusPF" rendered="#{cliBean.tipoPessoa}"/> <p:selectOneMenu id="cmbStatusPF" value="#{cliBean.pf.status}" rendered="#{cliBean.tipoPessoa}" required="true" requiredMessage="Status é obrigatório."> <f:selectItem itemLabel="-- SELECIONE --" /> <f:selectItems value="#{cliBean.listaStatus}" var="status" itemLabel="#{status}" itemValue="#{status}"/> <p:message for="cmbStatusPF" display="tooltip"/> </p:selectOneMenu> <p:outputLabel id="lblStatusPJ" value="Status:" for="cmbStatusPJ" rendered="#{!cliBean.tipoPessoa}"/> <p:selectOneMenu id="cmbStatusPJ" value="#{cliBean.pj.status}" rendered="#{!cliBean.tipoPessoa}" required="true" requiredMessage="Status é obrigatório."> <f:selectItem itemLabel="-- SELECIONE --" /> <f:selectItems value="#{cliBean.listaStatus}" var="status" itemLabel="#{status}" itemValue="#{status}"/> <p:message for="cmbStatusPJ" display="tooltip"/> </p:selectOneMenu> <p:outputLabel id="lblNome" value="Nome:" for="txtNome" rendered="#{cliBean.tipoPessoa}"/> <p:inputText id="txtNome" value="#{cliBean.pf.nome}" maxlength="50" size="43" rendered="#{cliBean.tipoPessoa}" required="true" requiredMessage="Nome é obrigatório."> <p:message for="txtNome" display="tooltip"/> </p:inputText> <p:outputLabel id="lblRazao" value="Razão Social:" for="txtRazSocial" rendered="#{!cliBean.tipoPessoa}"/> <p:inputText id="txtRazSocial" value="#{cliBean.pj.nome}" maxlength="50" size="43" rendered="#{!cliBean.tipoPessoa}" required="true" requiredMessage="Razão Social é obrigatório."> <p:message for="txtNome" display="tooltip"/> </p:inputText> <p:outputLabel id="lblRg" value="RG:" rendered="#{cliBean.tipoPessoa}" for="txtRg"/> <p:inputText id="txtRg" value="#{cliBean.pf.rg}" maxlength="20" size="18" rendered="#{cliBean.tipoPessoa}" required="true" requiredMessage="RG é Obrigatório."> <p:message for="txtRg" display="tooltip"/> </p:inputText> <p:outputLabel id="lblInscEstad" value="Insc.Estad:" rendered="#{!cliBean.tipoPessoa}" for="txtInscEstad"/> <p:inputText id="txtInscEstad" value="#{cliBean.pj.inscEstadual}" maxlength="20" size="18" rendered="#{!cliBean.tipoPessoa}" required="true" requiredMessage="Inscrição Estadual é obrigatório."> <p:message for="txtInscEstad" display="tooltip"/> </p:inputText> <p:outputLabel id="lblCpf" value="CPF:" rendered="#{cliBean.tipoPessoa}" for="txtCpf"/> <p:inputMask id="txtCpf" value="#{cliBean.pf.cpf}" maxlength="16" size="10" mask="999.999.999-99" rendered="#{cliBean.tipoPessoa}" required="true" requiredMessage="CPF é obrigatório."> <p:messages for="txtCpf" display="tooltip"/> </p:inputMask> <p:outputLabel id="lblCnpj" value="CNPJ:" rendered="#{!cliBean.tipoPessoa}" for="txtCnpj"/> <p:inputMask id="txtCnpj" value="#{cliBean.pj.cnpj}" maxlength="18" size="13" mask="99.999.999/9999-99" rendered="#{!cliBean.tipoPessoa}" required="true" requiredMessage="CNPJ é obrigatório."> <p:messages for="txtCnpj" display="tooltip"/> </p:inputMask> <p:outputLabel id="lblLograd" value="Endereço:" /> <p:inputText id="txtLogradouro" value="#{cliBean.endereco.logradouro}" maxlength="50" size="43" > <p:messages for="txtLogradouro" /> </p:inputText> <p:outputLabel id="lblNumLograd" value="Número:" /> <p:inputText id="txtNumLograd" value="#{cliBean.endereco.numLogradouro}" maxlength="5" size="5"/> <p:outputLabel id="lblBairro" value="Bairro:" /> <p:inputText id="txtBairro" value="#{cliBean.endereco.bairro}" maxlength="30" size="25"/> <p:outputLabel id="lblCep" value="CEP:" /> <p:inputMask id="txtCep" value="#{cliBean.endereco.cep}" maxlength="8" size="8" mask="99.999-999"> <p:messages for="txtCep"/> </p:inputMask> <p:outputLabel id="lblCidadePF" value="Cidade:" for="txtCidadePF" rendered="#{cliBean.tipoPessoa}"/> <p:inputText id="txtCidadePF" value="#{cliBean.endereco.cidade}" rendered="#{cliBean.tipoPessoa}" maxlength="40" size="33" required="true" requiredMessage="Cidade é obrigatório."> <p:messages for="txtCidadePF" display="tooltip"/> </p:inputText> <p:outputLabel id="lblCidadePJ" value="Cidade:" for="txtCidadePJ" rendered="#{!cliBean.tipoPessoa}"/> <p:inputText id="txtCidadePJ" value="#{cliBean.endereco.cidade}" rendered="#{!cliBean.tipoPessoa}" maxlength="40" size="33" required="true" requiredMessage="Cidade é obrigatório."> <p:messages for="txtCidadePJ" display="tooltip"/> </p:inputText> <p:outputLabel id="lblUfPF" value="UF:" for="cmbUfPF" rendered="#{cliBean.tipoPessoa}"/> <p:selectOneMenu id="cmbUfPF" value="#{cliBean.endereco.uf}" required="true" requiredMessage="UF é obrigatório." rendered="#{cliBean.tipoPessoa}"> <f:selectItem itemLabel="-- SELECIONE --" /> <f:selectItems value="#{cliBean.listaUf}" var="uf" itemLabel="#{uf}" itemValue="#{uf}"/> <p:messages for="cmbUfPF"/> </p:selectOneMenu> <p:outputLabel id="lblUfPJ" value="UF:" for="cmbUfPJ" rendered="#{!cliBean.tipoPessoa}"/> <p:selectOneMenu id="cmbUfPJ" value="#{cliBean.endereco.uf}" required="true" requiredMessage="UF é obrigatório." rendered="#{!cliBean.tipoPessoa}"> <f:selectItem itemLabel="-- SELECIONE --" /> <f:selectItems value="#{cliBean.listaUf}" var="uf" itemLabel="#{uf}" itemValue="#{uf}"/> <p:messages for="cmbUfPJ"/> </p:selectOneMenu> <p:outputLabel id="lblTelFixo" value="Tel.Fixo:" /> <p:inputMask id="txtTelFixo" value="#{cliBean.contato.tel_fixo}" maxlength="10" size="10" mask="(99)9999-9999" /> <p:outputLabel id="lblTelCelular" value="Tel.Celular:" /> <p:inputMask id="txtTelCelular" value="#{cliBean.contato.tel_celular}" maxlength="10" size="10" mask="(99)9999-9999" /> <p:outputLabel id="lblEmailPF" value="E-mail:" for="txtEmailPF" rendered="#{cliBean.tipoPessoa}"/> <p:inputText id="txtEmailPF" value="#{cliBean.contato.email}" rendered="#{cliBean.tipoPessoa}" maxlength="60" size="45" required="true" requiredMessage="E-mail inválido." validatorMessage="E-mail inválido."> <f:validateRegex pattern="[\w\.-]*[a-zA-Z0-9_]@[\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z.]*[a-zA-Z]" for="txtEmail" /> <p:messages for="txtEmailPF" display="tooltip"/> </p:inputText> <p:outputLabel id="lblEmailPJ" value="E-mail:" for="txtEmailPJ" rendered="#{!cliBean.tipoPessoa}"/> <p:inputText id="txtEmailPJ" value="#{cliBean.contato.email}" rendered="#{!cliBean.tipoPessoa}" maxlength="60" size="45" required="true" requiredMessage="E-mail inválido." validatorMessage="E-mail inválido."> <f:validateRegex pattern="[\w\.-]*[a-zA-Z0-9_]@[\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z.]*[a-zA-Z]" for="txtEmail" /> <p:messages for="txtEmailPJ" display="tooltip"/> </p:inputText> <p:outputLabel id="lblDataNasc" value="Data de Nascimento:" rendered="#{cliBean.tipoPessoa}" /> <p:outputLabel id="lblNomeFant" value="Nome Fantasia:" rendered="#{!cliBean.tipoPessoa}" /> <p:calendar id="dataNascimento" value="#{cliBean.pf.dataNascimento}" size="8" pattern="dd/MM/yyyy" rendered="#{cliBean.tipoPessoa}" required="true" requiredMessage="Data de nascimento é obrigatório."> <f:convertDateTime pattern="dd/MM/yyyy" /> <p:messages for="dataNascimento" display="tooltip"/> </p:calendar> <p:inputText id="txtNomeFant" value="#{cliBean.pj.nomeFantasia}" rendered="#{!cliBean.tipoPessoa}"/> <p:outputLabel id="lblTipoCliForPF" value="Tipo:" rendered="#{cliBean.tipoPessoa}" for="cmbTipoCliForPF"/> <p:selectOneMenu id="cmbTipoCliForPF" value="#{cliBean.pf.tipo}" rendered="#{cliBean.tipoPessoa}" required="true" requiredMessage="Tipo é obrigatório."> <f:selectItem itemLabel="-- SELECIONE --" /> <f:selectItems value="#{cliBean.tipos}" var="tipo" itemLabel="#{tipo}" itemValue="#{tipo}"/> <p:messages for="cmbTipoCliForPF" display="tooltip"/> </p:selectOneMenu> <p:outputLabel id="lblTipoCliForPJ" value="Tipo:" rendered="#{!cliBean.tipoPessoa}" for="cmbTipoCliForPJ"/> <p:selectOneMenu id="cmbTipoCliForPJ" value="#{cliBean.pj.tipo}" rendered="#{!cliBean.tipoPessoa}" required="true" requiredMessage="Tipo é obrigatório."> <f:selectItem itemLabel="-- SELECIONE --" /> <f:selectItems value="#{cliBean.tipos}" var="tipo" itemLabel="#{tipo}" itemValue="#{tipo}"/> <p:messages for="cmbTipoCliForPJ" display="tooltip"/> </p:selectOneMenu> <p:outputLabel id="lblSexo" value="Sexo:" rendered="#{cliBean.tipoPessoa}" for="radioSexo"/> <p:selectOneRadio id="radioSexo" value="#{cliBean.pf.sexo}" rendered="#{cliBean.tipoPessoa}" required="true" requiredMessage="Sexo é obrigatório."> <f:selectItem itemLabel="Masculino" itemValue="M" /> <f:selectItem itemLabel="Feminino" itemValue="F" /> <p:messages for="radioSexo" display="tooltip"/> </p:selectOneRadio> <p:outputLabel id="lblEstCivil" value="Estado Civil:" rendered="#{cliBean.tipoPessoa}" for="cmbEstCivil"/> <p:selectOneMenu id="cmbEstCivil" value="#{cliBean.pf.estado_civil}" rendered="#{cliBean.tipoPessoa}" required="true" requiredMessage="Estado Civil é obrigatório."> <f:selectItem itemLabel="-- SELECIONE --" /> <f:selectItems value="#{cliBean.listaEstCivil}" var="estCivil" itemLabel="#{estCivil}" itemValue="#{estCivil}"/> <p:messages for="cmbEstCivil" display="tooltip"/> </p:selectOneMenu> </p:panelGrid> [/code] BEAN [code] @ManagedBean(name = "cliBean") @ViewScoped public class ClienteBEAN implements Serializable{ private static final long serialVersionUID = 1L; private boolean tipoPessoa; private PessoaFisica pf = new PessoaFisica(); private PessoaJuridica pj = new PessoaJuridica(); private Endereco endereco = new Endereco(); private Contato contato = new Contato(); private String retorno = "erro"; // Métodos GET e SET public PessoaFisica getPf() { return pf; } public void setPf(PessoaFisica pessoa) { this.pf = pessoa; } public String getRetorno() { return retorno; } public void setRetorno(String retorno) { this.retorno = retorno; } public Endereco getEndereco() { return endereco; } public void setEndereco(Endereco endereco) { this.endereco = endereco; } public Contato getContato() { return contato; } public void setContato(Contato contato) { this.contato = contato; } public boolean isTipoPessoa() { return tipoPessoa; } public void setTipoPessoa(boolean tipoPessoa) { this.tipoPessoa = tipoPessoa; } public PessoaJuridica getPj() { return pj; } public void setPj(PessoaJuridica pj) { this.pj = pj; } // Métodos public Status[] getListaStatus(){ return Status.values(); } public Uf[] getListaUf(){ return Uf.values(); } public Sexo[] getListaSexo(){ return Sexo.values(); } public EstadoCivil[] getListaEstCivil(){ return EstadoCivil.values(); } public TipoCliFor[] getTipos(){ return TipoCliFor.values(); } public String addPessoa() { if(tipoPessoa == true){ try { PessoaFisicaDaoImp dao = new PessoaFisicaDaoImp(); pf.setEndereco(endereco); pf.setContato(contato); dao.salvaPF(pf); retorno = "Index"; } catch (Exception e) { } }else{ try { PessoaJuridicaDaoImp dao = new PessoaJuridicaDaoImp(); pj.setEndereco(endereco); pj.setContato(contato); dao.salvaPJ(pj); retorno = "Index"; } catch (Exception e) { } } return retorno; } } [/code]
Frameworks, APIs e IDE's Formulário cadastra apenas parte das informações thiago.ribeiro [quote="jcoli"][quote="thiago.ribeiro"][quote="jcoli"]Quais ele esta salvando? [/quote] Está salvando apenas endereço e contatos. Observei que os campos que não estão sendo salvos, são os que usei rendered. Eles renderizam corretamente em tempo de execução, porém não manda para o BD. Não consegui resolver ainda o problema. [/quote] Contrua um metodo para entrar na pagina de cadastro e coloque: public String metodoCadastro(){ pf = new PessoaFisica(); pj = new PessoaJuridica(); return pagina; } E seu Bean como SessionScoped ou ViewScoped. tente isso [/quote] Então jcoli, Esta noite consegui resolver. O problema era que no método addPessoa eu estava fazendo "pessoa = new PessoaFisica e pessoa = new PessoaJuridica". Neste ponto o meu objeto pessoa estava sendo "zerado", por isso não estava inserindo no BD. Resolvi tirando essas 2 linhas e trocando o escopo para ViewScoped. Muito obrigado pela sua ajuda e de todos do fórum.
Frameworks, APIs e IDE's Formulário cadastra apenas parte das informações thiago.ribeiro [quote="jcoli"]Quais ele esta salvando? [/quote] Está salvando apenas endereço e contatos. Observei que os campos que não estão sendo salvos, são os que usei rendered. Eles renderizam corretamente em tempo de execução, porém não manda para o BD. Não consegui resolver ainda o problema.
Frameworks, APIs e IDE's Formulário cadastra apenas parte das informações thiago.ribeiro Boa tarde pessoal, Estou desenvolvendo uma aplicação web JSF 2.2 + PrimeFaces + Hibernate + JPA e estou com um problema no formulário de cadastro de clientes. Quando clico no botão salvar, não está salvando parte dos dados inseridos. Segue formulário: [code] <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ui:composition template="/template/LayoutPadrao.xhtml" xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui"> <ui:define name="content"> <h:form id="frmCadastro"> <p:panel id="pnlDados" header="Cadastro de Cliente"> <p:panelGrid id="pngDadosCad" columns="6" styleClass="semBorda"> <f:facet name="header">Dados Cadastrais</f:facet> <p:outputLabel id="lblPessoa" value="Pessoa:" /> <p:selectOneRadio id="radioPFPJ" value="#{cliBean.tipoPessoa}"> <f:selectItem itemLabel="Física" itemValue="true" /> <f:selectItem itemLabel="Jurídica" itemValue="false" /> <p:ajax update="@form" event="change" process="@this" /> </p:selectOneRadio> <p:outputLabel id="lblDataCad" value="Data de Cadastro:" /> <p:calendar id="dataCadPF" value="#{cliBean.pf.dataCadastro}" size="8" pattern="dd/MM/yyyy" rendered="#{cliBean.tipoPessoa == 'true'}"> <f:convertDateTime pattern="dd/MM/yyyy" /> </p:calendar> <p:calendar id="dataCadPJ" value="#{cliBean.pj.dataCadastro}" size="8" pattern="dd/MM/yyyy" rendered="#{cliBean.tipoPessoa == 'false'}"> <f:convertDateTime pattern="dd/MM/yyyy" /> </p:calendar> <p:outputLabel id="lblStatus" value="Status:"/> <p:selectOneMenu id="cmbStatusPF" value="#{cliBean.pf.status}" rendered="#{cliBean.tipoPessoa == 'true'}"> <f:selectItem itemLabel="Ativo" itemValue="A" /> <f:selectItem itemLabel="Inativo" itemValue="I" /> </p:selectOneMenu> <p:selectOneMenu id="cmbStatusPJ" value="#{cliBean.pj.status}" rendered="#{cliBean.tipoPessoa == 'false'}"> <f:selectItem itemLabel="Ativo" itemValue="A" /> <f:selectItem itemLabel="Inativo" itemValue="I" /> </p:selectOneMenu> <p:outputLabel id="lblNome" value="Nome:" rendered="#{cliBean.tipoPessoa == 'true'}" /> <p:inputText id="txtNome" value="#{cliBean.pf.nome}" maxlength="50" size="43" rendered="#{cliBean.tipoPessoa == 'true'}" /> <p:inputText id="txtRazSocial" value="#{cliBean.pj.nome}" maxlength="50" size="43" rendered="#{cliBean.tipoPessoa == 'false'}" /> <p:outputLabel id="lblRg" value="RG:" rendered="#{cliBean.tipoPessoa == 'true'}" /> <p:inputText id="txtRg" value="#{cliBean.pf.rg}" maxlength="20" size="18" rendered="#{cliBean.tipoPessoa == 'true'}" /> <p:outputLabel id="lblInscEstad" value="Insc.Estad:" rendered="#{cliBean.tipoPessoa == 'false'}" /> <p:inputText id="txtInscEstad" value="#{cliBean.pj.inscEstadual}" maxlength="20" size="18" rendered="#{cliBean.tipoPessoa == 'false'}" /> <p:outputLabel id="lblCpf" value="CPF:" rendered="#{cliBean.tipoPessoa == 'true'}" /> <p:inputMask id="txtCpf" value="#{cliBean.pf.cpf}" maxlength="16" size="10" mask="999.999.999-99" rendered="#{cliBean.tipoPessoa == 'true'}" /> <p:outputLabel id="lblCnpj" value="CNPJ:" rendered="#{cliBean.tipoPessoa == 'false'}" /> <p:inputMask id="txtCnpj" value="#{cliBean.pj.cnpj}" maxlength="18" size="13" mask="99.999.999/9999-99" rendered="#{cliBean.tipoPessoa == 'false'}" /> <p:outputLabel id="lblLograd" value="Endereço:" /> <p:inputText id="txtLogradouro" value="#{cliBean.endereco.logradouro}" maxlength="50" size="43" /> <p:outputLabel id="lblNumLograd" value="Número:" /> <p:inputText id="txtNumLograd" value="#{cliBean.endereco.numLogradouro}" maxlength="5" size="5" /> <p:outputLabel id="lblBairro" value="Bairro:" /> <p:inputText id="txtBairro" value="#{cliBean.endereco.bairro}" maxlength="30" size="25" /> <p:outputLabel id="lblCep" value="CEP:" /> <p:inputMask id="txtCep" value="#{cliBean.endereco.cep}" maxlength="8" size="8" mask="99.999-999" /> <p:outputLabel id="lblCidade" value="Cidade:" /> <p:inputText id="txtCidade" value="#{cliBean.endereco.cidade}" maxlength="40" size="33" /> <p:outputLabel id="lblUf" value="UF:" /> <p:selectOneMenu id="cmbUf" value="#{cliBean.endereco.uf}"> <f:selectItem itemLabel="MS" itemValue="MS" /> <f:selectItem itemLabel="PR" itemValue="PR" /> <f:selectItem itemLabel="SP" itemValue="SP" /> <f:selectItem itemLabel="RS" itemValue="RS" /> </p:selectOneMenu> <p:outputLabel id="lblTelFixo" value="Tel.Fixo:" /> <p:inputMask id="txtTelFixo" value="#{cliBean.contato.tel_fixo}" maxlength="10" size="10" mask="(99)9999-9999" /> <p:outputLabel id="lblTelCelular" value="Tel.Celular:" /> <p:inputMask id="txtTelCelular" value="#{cliBean.contato.tel_celular}" maxlength="10" size="10" mask="(99)9999-9999" /> <p:outputLabel id="lblEmail" value="E-mail:" /> <p:inputText id="txtEmail" value="#{cliBean.contato.email}" maxlength="60" size="45" /> <p:outputLabel id="lblDataNasc" value="Data de Nascimento:" rendered="#{cliBean.tipoPessoa == 'true'}" /> <p:outputLabel id="lblNomeFant" value="Nome Fantasia:" rendered="#{cliBean.tipoPessoa == 'false'}" /> <p:calendar id="dataNascimento" value="#{cliBean.pf.dataNascimento}" size="8" pattern="dd/MM/yyyy" rendered="#{cliBean.tipoPessoa == 'true'}"> <f:convertDateTime pattern="dd/MM/yyyy" /> </p:calendar> <p:inputText id="txtNomeFant" value="#{cliBean.pj.nomeFantasia}" rendered="#{cliBean.tipoPessoa == 'false'}"/> <p:outputLabel id="lblSexo" value="Sexo:" rendered="#{cliBean.tipoPessoa == 'true'}" /> <p:selectOneRadio id="radioSexo" value="#{cliBean.pf.sexo}" rendered="#{cliBean.tipoPessoa == 'true'}"> <f:selectItem itemLabel="Masculino" itemValue="M" /> <f:selectItem itemLabel="Feminino" itemValue="F" /> </p:selectOneRadio> <p:outputLabel id="lblEstCivil" value="Estado Civil:" rendered="#{cliBean.tipoPessoa == 'true'}" /> <p:selectOneMenu id="cmbEstCivil" value="#{cliBean.pf.estado_civil}" rendered="#{cliBean.tipoPessoa == 'true'}"> <f:selectItem itemLabel="Solteiro" itemValue="S" /> <f:selectItem itemLabel="Casado" itemValue="C" /> <f:selectItem itemLabel="Divorciado" itemValue="D" /> <f:selectItem itemLabel="Viúvo" itemValue="V" /> </p:selectOneMenu> <f:facet name="footer"> <p:commandButton id="btnSalvar" value="Salvar" action="#{cliBean.addPessoa}" image="ui-icon-disk" /> <p:commandButton id="btnCancelar" value="Cancelar" type="reset" image="ui-icon-cancel" /> </f:facet> </p:panelGrid> </p:panel> </h:form> </ui:define> </ui:composition> [/code] Segue Bean: [code] package br.com.softcar.BEAN; import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; import br.com.softcar.Dao.imp.PessoaFisicaDaoImp; import br.com.softcar.Dao.imp.PessoaJuridicaDaoImp; import br.com.softcar.VO.Contato; import br.com.softcar.VO.Endereco; import br.com.softcar.VO.PessoaFisica; import br.com.softcar.VO.PessoaJuridica; import br.com.softcar.VO.TipoPessoa; @ManagedBean(name = "cliBean") @RequestScoped public class ClienteBEAN { private boolean tipoPessoa; private PessoaFisica pf; private PessoaJuridica pj; private Endereco endereco = new Endereco(); private Contato contato = new Contato(); private String retorno = "erro"; // Métodos GET e SET public PessoaFisica getPf() { return pf; } public void setPf(PessoaFisica pessoa) { this.pf = pessoa; } public String getRetorno() { return retorno; } public void setRetorno(String retorno) { this.retorno = retorno; } public Endereco getEndereco() { return endereco; } public void setEndereco(Endereco endereco) { this.endereco = endereco; } public Contato getContato() { return contato; } public void setContato(Contato contato) { this.contato = contato; } public boolean isTipoPessoa() { return tipoPessoa; } public void setTipoPessoa(boolean tipoPessoa) { this.tipoPessoa = tipoPessoa; } public PessoaJuridica getPj() { return pj; } public void setPj(PessoaJuridica pj) { this.pj = pj; } // Métodos public String addPessoa() { if(tipoPessoa == true){ try { pf = new PessoaFisica(); PessoaFisicaDaoImp dao = new PessoaFisicaDaoImp(); pf.setEndereco(endereco); pf.setContato(contato); pf.setTipo(TipoPessoa.PF); dao.salvaPF(pf); retorno = "Index"; } catch (Exception e) { } }else{ try { pj = new PessoaJuridica(); PessoaJuridicaDaoImp dao = new PessoaJuridicaDaoImp(); pj.setEndereco(endereco); pj.setContato(contato); pj.setTipo(TipoPessoa.PJ); dao.salvaPJ(pj); retorno = "Index"; } catch (Exception e) { } } return retorno; } } [/code] Desde já agradeço a todos.
Java Avançado Inserir dados do cliente em duas tabelas thiago.ribeiro Boa tarde pessoal, Estou com uma dúvida e gostaria da ajuda de vocês... Tenho uma aplicação JavaSE onde tenho estas classes...Cliente,Endereco,Contato...Obviamente elas são relacionadas. Minha dúvida é a seguinte: Preciso do ID_ENDERECO e do ID_CONTATO para poder inserir o Cliente, porém ai está o problema que ainda não consegui resolver. Como conseguir estes valores no momento que o usuário mandar salvar? Os relacionamentos estão da seguinte maneira: Cliente pode ter apenas 1 endereco; e Cliente poder ter 1 ou mais contatos; Desde já agradeço aos que puderem me ajudar.
Java Avançado Aplicação Comercial thiago.ribeiro [quote="staroski"][quote="thiago.ribeiro"]...estou dúvida sobre Swing e SWT. O que poderia me dizer desta decisão? [/quote] A dúvida certa seria entre Swing e JFaces Swing é uma extensão com MVC do AWT assim como JFaces é uma extensão com MVC do SWT SWT/JFaces tem suas peculiaridades: - sabendo desenvolver corretamente com a API, ele é bem mais rápido do que AWT/Swing; - é extremamente dependente de SO, vais precisar baixar DLLs pro Windows ou o correspondente pra outro SO - a API é bastante diferente do AWT/Swing, terás de aprender e entender bem a hierarquia e comportamento Exemplos de principais diferenças: No SWT um Radio Button, Check Box e Button são todos instâncias de Button, o que faz o visual e comportamento deles mudar são os parâmetros que você passa ao contrutor AWT/Swing disparam implicitamente uma Thread para propagação de eventos dos componentes, no SWT você precisa escrever explicitamente um laço na main thread pra fazer isso, semelhante a um game-loop no desenvolvimento de jogos Minha recomendação: Se estás começando e tem pouca ou nenhuma experiência com SWT/JFaces, parte pro AWT/Swing Se já conhece SWT/JFaces, manda bala [/quote] Realmente tive pouco contato com SWT/JFaces..apenas alguns videos demonstrando a aplicação. Não sou expert, mas tenho um melhor conhecimento com Swing. Estarei postando dúvidas que surgirem, espero que possa me ajudar futuramente,rs
Java Avançado Aplicação Comercial thiago.ribeiro [quote="D3z40"][quote="thiago.ribeiro"]Muito obrigado pelas respostas Staroski, certamente serão de grande ajuda. Estou com um projeto de um sistema para gerenciar uma clínica médica, com cadastro de pacientes, médicos, consultas e relatórios das consultas feitas. Não é um projeto muito grande, mas resolvi utilizar a tecnologia Java SE com SGBD PostgreSqL via JDBC. Só me falta resolver a questão da UI, estou dúvida sobre Swing e SWT. O que poderia me dizer desta decisão? [/quote] Não sou o melhor para falar sobre o assunto por falta de experiência, mas sei que o o swing não é lento como falam por ai. Minha maquina é um Pentium III e nunca tive problemas com o swing, não o acho lento, você irá notar a diferença se a sua aplicação for totalmente dependente da GUI, que é o caso das IDE's, como por exemplo, o eclipse que usa o SWT, talvez ficasse muito mais lento se fosse usado o Swing, mas no caso da sua aplicação que é apenas um intermédio entre o usuário e seu sistema você não terá problemas. De qualquer forma, seria bom você apurar mais opiniões de programadores mais experientes. Boa Sorte!!! [/quote] Muito obrigado pela opinião e pela dica. Vou procurar mais a respeito e posto aqui o resultado sobre a UI e também sobre o sistema conforme for ocorrendo o desenvolvimento.
Java Avançado Aplicação Comercial thiago.ribeiro Muito obrigado pelas respostas Staroski, certamente serão de grande ajuda. Estou com um projeto de um sistema para gerenciar uma clínica médica, com cadastro de pacientes, médicos, consultas e relatórios das consultas feitas. Não é um projeto muito grande, mas resolvi utilizar a tecnologia Java SE com SGBD PostgreSqL via JDBC. Só me falta resolver a questão da UI, estou dúvida sobre Swing e SWT. O que poderia me dizer desta decisão?
Java Avançado Aplicação Comercial thiago.ribeiro Boa tarde JavaFree, Sou novato aqui no fórum e também no mundo de desenvolvimento de software. Primeiramente gostaria de elogiar este maravilhoso fórum, pois nele aprendi muita coisa a respeito do mundo Java. Pessoal muito atencioso e prestativo. O pessoal aqui exemplifica muito bem a frase que carrego sempre comigo e em minha assinatura,rs. Parabéns a todos os integrantes do JavaFree. Bom, gostaria da opinião e dicas de todos vocês: 1: O Java para desktop é viável nos dias de hoje? Li em muitos fóruns que não é viável, que consome muita memória do computador causando lentidão (muitos citaram o Swing neste caso). 2: Qual seria uma melhor opção para desktop, JDBC ou Hibernate/JPA? O segundo quase não tive contato, apenas alguns exemplos bem básicos e algumas coisas que li a respeito. 3: Qual UI vocês indicam para desktop, Swing,SWT,JavaFX, etc? Desde já agradeço a atenção de todos.
Goto page 1