Linha em branco no SelectOneMenu
Galera, estou trabalhando com JSF, Hibernate e Spring, e preciso inserir linhas em branco em vários SelectOneMenu q tenho em minhas páginas, na verdade como inserir a linha eu sei, o problema é quando vou gravar:
erro:
nesse caso especifico, estou trabalhando com o SelectOneMenu de Sexo e é claro q ele não vai encontrar um Sexo com um id nulo q é quando eu seleciono a linha em branco.
xhtml do selectonemenu:
erro:
javax.servlet.ServletException: #{profissionalController.salvar}: javax.persistence.EntityNotFoundException: Unable to find br.org.creapi.entities.Sexo with id
nesse caso especifico, estou trabalhando com o SelectOneMenu de Sexo e é claro q ele não vai encontrar um Sexo com um id nulo q é quando eu seleciono a linha em branco.
xhtml do selectonemenu:
<h:outputText value="Sexo" styleClass="saidaTexto" for="sexo" /> <h:selectOneMenu id="sexo" value="#{profissionalController.profissional.sexo.idsexo}"> <f:selectItem itemValue="" itemLabel=""/> <f:selectItems value="#{profissionalController.sexo}" /> </h:selectOneMenu> <h:message for="sexo" styleClass="message" />
José Filho
Curtidas 0
Respostas
Angelo Santos
22/04/2010
José,
Vc poderia definir uma outra opção no combo relacionado ao sexo. Ex: 'Outro'.
Ou se quiser, vc pode definir na tabela sexo do banco como 'NULL';
Espero ter ajudado.
Vc poderia definir uma outra opção no combo relacionado ao sexo. Ex: 'Outro'.
Ou se quiser, vc pode definir na tabela sexo do banco como 'NULL';
Espero ter ajudado.
GOSTEI 0
José Filho
22/04/2010
Na verdade não gostaria de definir uma outra opção - já tinha pensado nisso - mas se não for o jeito...
No banco já está null
No banco já está null
GOSTEI 0
Dyego Carmo
22/04/2010
Cole aqui o codigo do seu bean e o codigo da pagina...
Assim posso analisar corretamente !
Assim posso analisar corretamente !
GOSTEI 0
José Filho
22/04/2010
Bom Diego, antes de mais nada gostaria de dizer q sou assinante Java Magazine e já assisti há muitas vídeo-aulas suas, parabéns.Quanto ao meu problema, vou tentar resumir, basicamente é como trabalhar com uma ou duas entidade(s) q se relacionam, mas, cuja chave estrangeira não é obrigatória, ou seja, pode ser null.
Possuo a tabela Pessoa e Profissional, na tabela Profissional, tem um campo Assistente, q é um Profissional já previamente cadastrado, mas q não é obrigatório, ou seja, um Profissional pode ou não ter um Assistente, então, temos um auto-relacionamento. Da mesma forma, possuo outras entidades q se relacionam com Profissional, como Sexo, por exemplo, q é escolhido através de um selectonemenu no xhtml, no entanto gostaria que quando fosse cadastrar um novo Profissional, tanto o Assistente, quanto o Sexo, pudessem ficar em branco(nulo) e ai meu amigo, começa a baderna, agora os códigos:
Pessoa
Profissional - só o necessário
Sexo
ProfissionalController - como é grande, vou colocar somente o q acho pertinente
formProfissional.xhtml:
Bom, quanto a essas linhas do editar:
if (profissional.getSexo() == null) {
profissional.setSexo(new Sexo());
}
if (profissional.getAssistente() == null) {
profissional.setAssistente(new Profissional());
}
é uma gambiarra eu sei, ao fazer uma pesquisa pelo profissional numa tela de consulta, quando clico no registro exibido em um ExtendedDataTable, para ser exibido no formProfissional.xhtml, já dá um erro:
não entendo porque ele se refere a salvar, já q só estou tentando visualizar os dados;
De outra forma se tiro as referidas linhas, consigo visualizar as informações do registro, no entanto ao tentar salvá-lo (tanto faz se é um novo ou edição), outro erro, mas só quando não há um assistente já associado ao profissional e sexo não definido:
e é isso, desculpe a quantidade de informação, mas, acho necessário para q vc possa analizar o problema como um todo e apesar de minha dúvida inicial ser relacionada ao sexo, o problema do Assistente é praticamente igual, pq se tirar toda referencia do projeto ao assistente, o erro dá no sexo.
Obrigado
Possuo a tabela Pessoa e Profissional, na tabela Profissional, tem um campo Assistente, q é um Profissional já previamente cadastrado, mas q não é obrigatório, ou seja, um Profissional pode ou não ter um Assistente, então, temos um auto-relacionamento. Da mesma forma, possuo outras entidades q se relacionam com Profissional, como Sexo, por exemplo, q é escolhido através de um selectonemenu no xhtml, no entanto gostaria que quando fosse cadastrar um novo Profissional, tanto o Assistente, quanto o Sexo, pudessem ficar em branco(nulo) e ai meu amigo, começa a baderna, agora os códigos:
Pessoa
@Entity @Table(name = "pessoa") @Inheritance(strategy=InheritanceType.JOINED) public class Pessoa implements java.io.Serializable { private static final long serialVersionUID = 1L; private String codigo; private String cpfcnpj; private String nome; private String email; private Profissional profissional; public Pessoa() { } public Pessoa(String codigo) { this.codigo = codigo; } @Id @Column(name = "codigo", unique = true, nullable = false) public String getCodigo() { return this.codigo; } public void setCodigo(String codigo) { this.codigo = codigo; } @Column(name = "cpfcnpj") public String getCpfcnpj() { return this.cpfcnpj; } public void setCpfcnpj(String cpfcnpj) { this.cpfcnpj = cpfcnpj; } @Column(name = "nome") public String getNome() { return this.nome; } public void setNome(String nome) { this.nome = nome; } @Column(name = "email", length = 60) public String getEmail() { return this.email; } public void setEmail(String email) { this.email = email; } @OneToOne(fetch = FetchType.LAZY, cascade=CascadeType.ALL) @PrimaryKeyJoinColumn public Profissional getProfissional() { return this.profissional; } public void setProfissional(Profissional profissional) { this.profissional = profissional; } }
Profissional - só o necessário
@Entity @Table(name = "profissional") @PrimaryKeyJoinColumn(name = "codigo") public class Profissional extends Pessoa implements java.io.Serializable { private static final long serialVersionUID = 1L; private Sexo sexo; private Tiporegistro tiporegistro; private Situacaoregistro situacaoregistro; private Profissional assistente; private Date datanascimento; public Profissional() { } @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "idsexo", nullable = true) public Sexo getSexo() { return this.sexo; } public void setSexo(Sexo sexo) { this.sexo = sexo; } @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "idtiporegistro", nullable = false) public Tiporegistro getTiporegistro() { return this.tiporegistro; } public void setTiporegistro(Tiporegistro tiporegistro) { this.tiporegistro = tiporegistro; } @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "idsituacaoregistro", nullable = false) public Situacaoregistro getSituacaoregistro() { return this.situacaoregistro; } public void setSituacaoregistro(Situacaoregistro situacaoregistro) { this.situacaoregistro = situacaoregistro; } @ManyToOne(fetch = FetchType.EAGER, optional=true) @JoinColumn(name = "rnpassistente", nullable = true) public Profissional getAssistente() { return assistente; } public void setAssistente(Profissional assistente) { this.assistente = assistente; } @Temporal(TemporalType.DATE) @Column(name = "datanascimento", length = 13) public Date getDatanascimento() { return this.datanascimento; } public void setDatanascimento(Date datanascimento) { this.datanascimento = datanascimento; } }
Sexo
@Entity @Table(name = "sexo") public class Sexo implements Serializable { private static final long serialVersionUID = 1L; private String idsexo; private String descricao; private Set<Profissional> profissionais; public Sexo() { } public Sexo(String idsexo) { this.idsexo = idsexo; } public Sexo(String idsexo, String descricao, Set<Profissional> profissionais) { this.idsexo = idsexo; this.descricao = descricao; this.profissionais = profissionais; } @Id @Column(name = "idsexo", unique = true, nullable = false, length = 1) public String getIdsexo() { return this.idsexo; } public void setIdsexo(String idsexo) { this.idsexo = idsexo; } @Column(name = "descricao", length = 10) public String getDescricao() { return this.descricao; } public void setDescricao(String descricao) { this.descricao = descricao; } @OneToMany(fetch = FetchType.LAZY, mappedBy = "sexo") public Set<Profissional> getProfissionais() { return this.profissionais; } public void setProfissionais(Set<Profissional> profissionais) { this.profissionais = profissionais; } }
ProfissionalController - como é grande, vou colocar somente o q acho pertinente
@Controller("profissionalController") @Scope("session") public class ProfissionalController { private Profissional profissional; private Pessoa pessoa; @Resource private DaoGenerico<Profissional, String> profissionalDao; @Resource private DaoGenerico<Sexo, String> sexoDao; private DataModel model; private Map<String, Object> sexoItem = null; private Map<String, Object> tiporegistroItem = null; private Map<String, Object> situacaoregistroItem = null; public ProfissionalController() { this.profissional = new Profissional(); } public Map<String, Object> getSexo() { sexoItem = new LinkedHashMap<String, Object>(); sexoItem.put("", ""); for (Iterator<?> iter = sexoDao.todos(2).iterator(); iter.hasNext();) { Sexo c = (Sexo) iter.next(); sexoItem.put(c.getDescricao(), c.getIdsexo());// label,value } return sexoItem; } public Map<String, Object> getTipoRegistro() { tiporegistroItem = new LinkedHashMap<String, Object>(); for (Iterator<?> iter = tiporegistroDao.todos(2).iterator(); iter .hasNext();) { Tiporegistro c = (Tiporegistro) iter.next(); tiporegistroItem.put(c.getDescricao(), c.getIdtiporegistro());// label,value } return tiporegistroItem; } public Map<String, Object> getSituacaoRegistro() { situacaoregistroItem = new LinkedHashMap<String, Object>(); for (Iterator<?> iter = situacaoregistroDao.todos(2).iterator(); iter .hasNext();) { Situacaoregistro c = (Situacaoregistro) iter.next(); situacaoregistroItem.put(c.getDescricao(), c .getIdsituacaoregistro());// label,value } return situacaoregistroItem; } public String novo() { this.profissional = new Profissional(); this.profissional.setTiporegistro(new Tiporegistro()); getTipoRegistro(); this.profissional.setSituacaoregistro(new Situacaoregistro()); getSituacaoRegistro(); this.profissional.setSexo(new Sexo()); getSexo(); this.profissional.setAssistente(new Profissional()); pessoa = new Pessoa(); novoRegistro = true; return "formProfissional"; } public String salvar() { //isso já foi gambiarra tentando corrigir o problema if (profissional.getSexo().getIdsexo().equals("")) { profissional.setSexo(null); } else { profissional.setSexo(sexoDao.pesquisarPorId(profissional.getSexo() .getIdsexo())); } if (profissional.getAssistente().getCodigo().equals("")) { profissional.setAssistente(null); } else { profissional.setAssistente(profissionalDao .pesquisarPorId(profissional.getAssistente().getCodigo())); } //aqui começa o salvar de verdade if (novoRegistro == true) { profissionalDao.salvar(profissional); FacesUtils.mensErro("Registro Salvo com Sucesso!"); } else { profissionalDao.atualizar(profissional); FacesUtils.mensErro("Registro Atualizado com Sucesso!"); } return "sucesso"; } public String editar() { FacesContext context = FacesContext.getCurrentInstance(); Profissional profissional = (Profissional) context.getExternalContext() .getRequestMap().get("item"); // if (profissional.getSexo() == null) { profissional.setSexo(new Sexo()); } if (profissional.getAssistente() == null) { profissional.setAssistente(new Profissional()); } // //o salvar era pra ser só essa parte aqui setProfissional(profissional); return "formProfissional"; }
formProfissional.xhtml:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:rich="http://richfaces.org/rich" xmlns:a4j="http://richfaces.org/a4j" xmlns:stella="http://stella.caelum.com.br/faces" xmlns:c="http://java.sun.com/jstl/core"> <ui:composition template="template.xhtml"> <a4j:keepAlive beanName="profissionalController" /> <ui:define name="titulo">Profissional</ui:define> <ui:define name="content"> <div id="formulario"> <h1>Cadastrar Profissional</h1> <hr /> <br /> <fieldset><legend>Dados Pessoais</legend> <h:panelGrid columns="3" styleClass="panelGrid" columnClasses="pgColumn1,pgColumn2,pgColumn3"> <h:outputText value="Sexo" styleClass="saidaTexto" for="sexo" /> <h:selectOneMenu id="sexo" value="#{profissionalController.profissional.sexo.idsexo}"> <f:selectItems value="#{profissionalController.sexo}" /> </h:selectOneMenu> <h:message for="sexo" styleClass="message" /> <h:outputText value="RNP Assistente" styleClass="saidaTexto" for="rnpassistente" /> <h:inputText id="rnpassistente" value="#{profissionalController.profissional.assistente.codigo}" size="15" > <a4j:support event="onblur" reRender="resultado" /> </h:inputText> <h:message for="rnpassistente" styleClass="message" />
Bom, quanto a essas linhas do editar:
if (profissional.getSexo() == null) {
profissional.setSexo(new Sexo());
}
if (profissional.getAssistente() == null) {
profissional.setAssistente(new Profissional());
}
é uma gambiarra eu sei, ao fazer uma pesquisa pelo profissional numa tela de consulta, quando clico no registro exibido em um ExtendedDataTable, para ser exibido no formProfissional.xhtml, já dá um erro:
Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.org.creapi.entities.Profissional.assistente -> br.org.creapi.entities.Profissional at org.hibernate.engine.CascadingAction$9.noCascade(CascadingAction.java:387) at org.hibernate.engine.Cascade.cascade(Cascade.java:172) at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:451) at org.hibernate.event.def.DefaultPersistEventListener.entityIsPersistent(DefaultPersistEventListener.java:158) at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:132) at org.hibernate.impl.SessionImpl.firePersistOnFlush(SessionImpl.java:826) at org.hibernate.impl.SessionImpl.persistOnFlush(SessionImpl.java:818) at org.hibernate.engine.CascadingAction$9.cascade(CascadingAction.java:357) at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204) at org.hibernate.engine.Cascade.cascade(Cascade.java:161) at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:154) at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:145) at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:88) at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:58) at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1175) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1251) at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:236) ... 67 more
não entendo porque ele se refere a salvar, já q só estou tentando visualizar os dados;
De outra forma se tiro as referidas linhas, consigo visualizar as informações do registro, no entanto ao tentar salvá-lo (tanto faz se é um novo ou edição), outro erro, mas só quando não há um assistente já associado ao profissional e sexo não definido:
javax.servlet.ServletException: /formProfissional.xhtml @398,81 value="#{profissionalController.profissional.assistente.codigo}": Target Unreachable, 'assistente' returned null javax.faces.webapp.FacesServlet.service(FacesServlet.java:277) org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206) org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388) org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515) org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) root cause javax.el.PropertyNotFoundException: /formProfissional.xhtml @398,81 value="#{profissionalController.profissional.assistente.codigo}": Target Unreachable, 'assistente' returned null com.sun.facelets.el.TagValueExpression.getType(TagValueExpression.java:62) com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:92) javax.faces.component.UIInput.getConvertedValue(UIInput.java:942) javax.faces.component.UIInput.validate(UIInput.java:868) javax.faces.component.UIInput.executeValidate(UIInput.java:1072) javax.faces.component.UIInput.processValidators(UIInput.java:672) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1058) javax.faces.component.UIForm.processValidators(UIForm.java:234) org.ajax4jsf.component.AjaxViewRoot$3.invokeContextCallback(AjaxViewRoot.java:447) org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:240) org.ajax4jsf.component.AjaxViewRoot.processValidators(AjaxViewRoot.java:463) com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76) com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) javax.faces.webapp.FacesServlet.service(FacesServlet.java:265) org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206) org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388) org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515) org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
e é isso, desculpe a quantidade de informação, mas, acho necessário para q vc possa analizar o problema como um todo e apesar de minha dúvida inicial ser relacionada ao sexo, o problema do Assistente é praticamente igual, pq se tirar toda referencia do projeto ao assistente, o erro dá no sexo.
Obrigado
GOSTEI 0
José Filho
22/04/2010
Estou precisando muito de ajuda.
GOSTEI 0
Dyego Carmo
22/04/2010
É ai que voce se engana...
O que voce fez nao foi um xunxo...
Somente criando o objeto o JSF vai conseguir acessa-lo...
para evitar este IF voce pode colocar os creates DIRETO na classe de pessoa...
onde estiver por exemplo:
private Sexo sexo;
ponha:
private Sexo sexo = new Sexo();
se vc estiver utilizando Java EE 6 bote um @Valid em cima , assim ele vai validar se o Sexo é um objeto valido :)
O que voce fez nao foi um xunxo...
Somente criando o objeto o JSF vai conseguir acessa-lo...
para evitar este IF voce pode colocar os creates DIRETO na classe de pessoa...
onde estiver por exemplo:
private Sexo sexo;
ponha:
private Sexo sexo = new Sexo();
se vc estiver utilizando Java EE 6 bote um @Valid em cima , assim ele vai validar se o Sexo é um objeto valido :)
GOSTEI 0
José Filho
22/04/2010
Diego, pra te dizer a verdade, não sei qual a versão do Java EE estou usando, já procurei nas propriedades do Projeto, mas, não encontro; as tecnologias utilizadas são: JSF, Spring, Hibernate; Servelt Container: Tomcat; Eclipse IDE for Java EE 3.5.2 com JBoss Tools;
Eu pergunto a você, mesmo utilizando só o Tomcat, posso fazer uso do Java EE? Ou obrigatoriamente tenho q ter um Servidor de Aplicações (GlassFish, JBoss);
Será q essa versão do Eclipse tem suporte ao Java EE 6?
Estou te perguntando isso pq coloquei a anotação @Valid, mas não foi reconhecida, ou o Eclipse não dá suporte ao Java EE 6 ou o meu projeto não está fazendo uso do Java EE 6;
Tem alguma outra forma de resolver meu problema, sem o @Valid?
Obrigado.
Eu pergunto a você, mesmo utilizando só o Tomcat, posso fazer uso do Java EE? Ou obrigatoriamente tenho q ter um Servidor de Aplicações (GlassFish, JBoss);
Será q essa versão do Eclipse tem suporte ao Java EE 6?
Estou te perguntando isso pq coloquei a anotação @Valid, mas não foi reconhecida, ou o Eclipse não dá suporte ao Java EE 6 ou o meu projeto não está fazendo uso do Java EE 6;
Tem alguma outra forma de resolver meu problema, sem o @Valid?
Obrigado.
GOSTEI 0
Dyego Carmo
22/04/2010
Sem @Valid
onde estiver por exemplo:
private Sexo sexo;
ponha:
private Sexo sexo = new Sexo();
onde estiver por exemplo:
private Sexo sexo;
ponha:
private Sexo sexo = new Sexo();
GOSTEI 0
José Filho
22/04/2010
Diego, tire o if referente ao Sexo do método editar e substitui o q vc disse na classe Profissional:
private Sexo sexo = new Sexo();
quando vou gravar, o erro:
private Sexo sexo = new Sexo();
quando vou gravar, o erro:
javax.el.PropertyNotFoundException: /formProfissional.xhtml @131,64 value="#{profissionalController.profissional.sexo.idsexo}": Target Unreachable, 'sexo' returned null com.sun.facelets.el.TagValueExpression.getType(TagValueExpression.java:62) com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:92) com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectOneValue(MenuRenderer.java:188) com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(MenuRenderer.java:301) javax.faces.component.UIInput.getConvertedValue(UIInput.java:942) javax.faces.component.UIInput.validate(UIInput.java:868) javax.faces.component.UIInput.executeValidate(UIInput.java:1072) javax.faces.component.UIInput.processValidators(UIInput.java:672) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1058) javax.faces.component.UIForm.processValidators(UIForm.java:234) org.ajax4jsf.component.AjaxViewRoot$3.invokeContextCallback(AjaxViewRoot.java:447) org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:240) org.ajax4jsf.component.AjaxViewRoot.processValidators(AjaxViewRoot.java:463) com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76) com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) javax.faces.webapp.FacesServlet.service(FacesServlet.java:265) org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206) org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388) org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515) org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
GOSTEI 0
Dyego Carmo
22/04/2010
Muito estranho , o erro nao bate...
Cole aqui sua nova classe Profissional.
Cole aqui sua nova classe Profissional.
GOSTEI 0
José Filho
22/04/2010
Profissional
O editar ficou assim:
e o salvar, com ou sem o bloco comentado, dá erro:
package br.org.creapi.entities; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name = "profissional") @PrimaryKeyJoinColumn(name = "codigo") public class Profissional extends Pessoa implements java.io.Serializable { private static final long serialVersionUID = 1L; private Sexo sexo = new Sexo(); private Tiporegistro tiporegistro; private Situacaoregistro situacaoregistro; private Profissional assistente; private Date datanascimento; public Profissional() { } @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "idsexo", nullable = true) public Sexo getSexo() { return this.sexo; } public void setSexo(Sexo sexo) { this.sexo = sexo; } @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "idtiporegistro", nullable = false) public Tiporegistro getTiporegistro() { return this.tiporegistro; } public void setTiporegistro(Tiporegistro tiporegistro) { this.tiporegistro = tiporegistro; } @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "idsituacaoregistro", nullable = false) public Situacaoregistro getSituacaoregistro() { return this.situacaoregistro; } public void setSituacaoregistro(Situacaoregistro situacaoregistro) { this.situacaoregistro = situacaoregistro; } @Temporal(TemporalType.DATE) @Column(name = "datanascimento", length = 13) public Date getDatanascimento() { return this.datanascimento; } public void setDatanascimento(Date datanascimento) { this.datanascimento = datanascimento; } @ManyToOne(fetch = FetchType.EAGER, optional=true) @JoinColumn(name = "rnpassistente", nullable = true) public Profissional getAssistente() { return assistente; } public void setAssistente(Profissional assistente) { this.assistente = assistente; } }
O editar ficou assim:
public String editar() { novoRegistro = false; FacesContext context = FacesContext.getCurrentInstance(); Profissional profissional = (Profissional) context.getExternalContext() .getRequestMap().get("item"); // if (profissional.getSexo() == null) { // profissional.setSexo(null); // } if (profissional.getAssistente() == null) { profissional.setAssistente(null); } setProfissional(profissional); return "formProfissional"; }
e o salvar, com ou sem o bloco comentado, dá erro:
public String salvar() { // if (profissional.getSexo().getIdsexo().equals("")) { // profissional.setSexo(null); // } else { // profissional.setSexo(sexoDao.pesquisarPorId(profissional.getSexo() // .getIdsexo())); // } if (profissional.getAssistente().getCodigo().equals("")) { profissional.setAssistente(null); } else { profissional.setAssistente(profissionalDao .pesquisarPorId(profissional.getAssistente().getCodigo())); } if (novoRegistro == true) { profissionalDao.salvar(profissional); FacesUtils.mensErro("Registro Salvo com Sucesso!"); } else { profissionalDao.atualizar(profissional); FacesUtils.mensErro("Registro Atualizado com Sucesso!"); } return "sucesso"; }
GOSTEI 0
Dyego Carmo
22/04/2010
Comente e cole o erro aqui...
FULL...
FULL...
GOSTEI 0
José Filho
22/04/2010
type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception javax.servlet.ServletException: /formProfissional.xhtml @131,64 value="#{profissionalController.profissional.sexo.idsexo}": Target Unreachable, 'sexo' returned null javax.faces.webapp.FacesServlet.service(FacesServlet.java:277) org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206) org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388) org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515) org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) root cause javax.el.PropertyNotFoundException: /formProfissional.xhtml @131,64 value="#{profissionalController.profissional.sexo.idsexo}": Target Unreachable, 'sexo' returned null com.sun.facelets.el.TagValueExpression.getType(TagValueExpression.java:62) com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:92) com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectOneValue(MenuRenderer.java:188) com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(MenuRenderer.java:301) javax.faces.component.UIInput.getConvertedValue(UIInput.java:942) javax.faces.component.UIInput.validate(UIInput.java:868) javax.faces.component.UIInput.executeValidate(UIInput.java:1072) javax.faces.component.UIInput.processValidators(UIInput.java:672) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1058) javax.faces.component.UIForm.processValidators(UIForm.java:234) org.ajax4jsf.component.AjaxViewRoot$3.invokeContextCallback(AjaxViewRoot.java:447) org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:240) org.ajax4jsf.component.AjaxViewRoot.processValidators(AjaxViewRoot.java:463) com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76) com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) javax.faces.webapp.FacesServlet.service(FacesServlet.java:265) org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206) org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388) org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515) org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) note The full stack trace of the root cause is available in the Apache Tomcat/6.0.26 logs.
GOSTEI 0
Dyego Carmo
22/04/2010
Deixe o IF que tá parecendo uma solucao menos sinistra hehe...
Que erro estranho !
Que erro estranho !
GOSTEI 0