Problema PrimeFaces + JPA + JSF2 + Selectonemenu

4 respostas
L

Bom dia galera estou com um problema ao utilizar SelectOneMenu. seguinte, eu tenho uma lista de categorias e uma lista de contas que gostaria de selecionar em um selectonemenu para associar estas duas entidades a uma transação. Porem não estou conseguindo, já tentei inumeras soluções sem sucesso.

Atualmente estou tentando da seguinte forma:

este é meu form:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<ui:composition xmlns="http://ww.w3.org/1999/xhtml"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui">
	<h:inputHidden id="hiddenID" value="#{transacaoBean.transacao.id}"></h:inputHidden>
	<p:growl id="growl" showDetail="true" sticky="true" />

	<p:panel id="panel" style="align: center">
		<p:panelGrid columns="4">
			<p:outputLabel value="Selecione uma Conta: " for="campo-conta" />
			<p:selectOneMenu value="#{transacaoBean.transacao.conta}"
				id="campo-conta" required="true"
				requiredMessage="Por favor selecione uma conta" converter="conta">
				<f:selectItem itemLabel="Selecione" noSelectionOption="true" />
				<f:selectItems value="#{transacaoBean.contas}" var="conta"
					itemValue="#{conta.id}" itemLabel="#{conta.descricao}" />
				<p:ajax update="gridTransacao" />
			</p:selectOneMenu>
			<p:message for="campo-conta" />
			<p:tooltip for="campo-conta"
				value="Selecione uma conta para incluir ou alterar uma transação"
				showEffect="slide" hideEffect="explode"></p:tooltip>
		</p:panelGrid>

		<p:separator></p:separator>

		<p:panelGrid columns="4" id="gridTransacao">
			<f:facet name="header">
				Informações da Transação
			</f:facet>
			<p:outputLabel value="Descrição da Transação" for="campo-transacao" />
			<p:inputText id="campo-transacao"
				value="#{transacaoBean.transacao.descricao}" required="true"
				requiredMessage="Por favor informe uma descrição para a transação"></p:inputText>
			<p:message for="campo-transacao" />
			<p:tooltip for="campo-transacao"
				value="Por favor preencha uma descrição para a transação"
				showEffect="slide" hideEffect="explode"></p:tooltip>

			<p:outputLabel value="Data de Vencimento" for="campo-data-vencimento" />
			<p:calendar id="campo-data-vencimento"
				value="#{transacaoBean.transacao.dataVencimento}"
				pattern="dd/MM/yyyy" locale="pt" showButtonPanel="true"
				navigator="true" required="true"
				requiredMessage="Por favor informe a data de vencimento para a conta" />
			<p:message for="campo-data-vencimento" />
			<p:tooltip for="campo-data-vencimento"
				value="Por favor preencha uma descrição para a transação"
				showEffect="slide" hideEffect="explode"></p:tooltip>

			<p:outputLabel value="Data de Pagamento" for="campo-data-pagamento" />
			<p:calendar id="campo-data-pagamento"
				value="#{transacaoBean.transacao.dataTransacao}"
				pattern="dd/MM/yyyy" locale="pt" readonly="true"
				showButtonPanel="true" navigator="true" />
			<p:message for="campo-data-pagamento" />
			<p:tooltip for="campo-data-pagamento"
				value="Caso necessário preencha a data em que a transação foi paga"
				showEffect="slide" hideEffect="explode"></p:tooltip>

			<p:outputLabel value="Selecione um Status: " for="campo-status" />
			<p:selectOneMenu value="#{transacaoBean.transacao.status}" id="campo-status"
				required="true" requiredMessage="Por favor selecione um status">
				<f:selectItem itemLabel="Selecione" noSelectionOption="true" />
				<f:selectItem itemLabel="Pago" itemValue="1" />
				<f:selectItem itemLabel="Pendente" itemValue="2" />
			</p:selectOneMenu>
			<p:message for="campo-status" />
			<p:tooltip for="campo-status"
				value="Selecione um status para incluir ou alterar uma transação"
				showEffect="slide" hideEffect="explode"></p:tooltip>

			<p:outputLabel value="Selecione uma Categoria " for="campo-categoria" />
			<p:selectOneMenu value="#{transacaoBean.transacao.categoria}"
				id="campo-categoria" required="true"
				requiredMessage="Por favor selecione um status"
				converter="categoria">
				<f:selectItem itemLabel="Selecione" noSelectionOption="true" />
				<f:selectItems value="#{transacaoBean.categorias}" var="categoria"
					itemValue="#{categoria.id}" itemLabel="#{categoria.descricao}" />
			</p:selectOneMenu>
			<p:message for="campo-categoria" />
			<p:tooltip for="campo-categoria"
				value="Selecione uma Categoria para incluir ou alterar uma transação"
				showEffect="slide" hideEffect="explode"></p:tooltip>

			<p:outputLabel value="Valor da Transação" for="campo-valor" />
			<p:inputText value="#{transacaoBean.transacao.valor}"
				id="campo-valor" required="true" requiredMessage="Campo Obrigatório"
				maxlength="40" type="decimal">
				<f:convertNumber pattern="#,##0.00;(#,##0.00)"></f:convertNumber>
				<p:ajax update="campo-valor,msgCampo-valor" />
			</p:inputText>
			<p:message for="campo-valor" id="msgCampo-valor" />
			<p:tooltip for="campo-valor" value="Preencha o valor da transação"
				showEffect="slide" hideEffect="explode"></p:tooltip>
		</p:panelGrid>
		<p:commandButton value="Salvar"
			update="panel,gridTransacao,growl,hiddenID" id="ajax"
			actionListener="#{transacaoBean.adiciona}" />
	</p:panel>
</ui:composition>

este é meu managedbean:

@ManagedBean
public class TransacaoBean {

	private Transacao transacao = new Transacao();

	private List<Conta> contas;

	private List<Transacao> transacoes;

	private List<Categoria> categorias;

	public void adiciona() {
		EntityManager manager = this.getManager();
		TransacaoRepository repository = new TransacaoRepository(manager);

		ContaRepository contaRepository = new ContaRepository(manager);
		CategoriaRepository categoriaRepository = new CategoriaRepository(
				manager);

		String mensagem = "";

		if (this.transacao.getId() == null || this.transacao.getId() == 0) {
			repository.adiciona(this.transacao);

			mensagem = "Transação cadastrada com sucesso";
		} else {
			repository.atualiza(transacao);

			mensagem = "Transação atualizada com sucesso";
		}

		FacesContext context = FacesContext.getCurrentInstance();
		context.addMessage(null, new FacesMessage("sucesso", mensagem));
		this.transacao = new Transacao();
		this.transacoes = null;

	}

	public void preparaAlteracao() {
		Map<String, String> params = FacesContext.getCurrentInstance()
				.getExternalContext().getRequestParameterMap();

		Long id = Long.parseLong(params.get("id"));
		EntityManager manager = this.getManager();
		TransacaoRepository repository = new TransacaoRepository(manager);
		this.transacao = repository.procurar(id);
	}

	public void remove() {
		Map<String, String> params = FacesContext.getCurrentInstance()
				.getExternalContext().getRequestParameterMap();

		Long id = Long.parseLong(params.get("id"));
		EntityManager manager = this.getManager();
		TransacaoRepository repository = new TransacaoRepository(manager);
		repository.remove(id);
		this.transacoes = null;
	}

	public List<Transacao> getTransacoes() {
		if (this.transacoes == null) {
			EntityManager manager = this.getManager();
			TransacaoRepository repository = new TransacaoRepository(manager);
			this.transacoes = repository.getLista(this.transacao.getConta());
		}
		return this.transacoes;
	}

	public Transacao getTransacao() {
		return transacao;
	}

	public void setTransacao(Transacao transacao) {
		this.transacao = transacao;
	}

	public void setTransacoes(List<Transacao> transacoes) {
		this.transacoes = transacoes;
	}

	public List<Conta> getContas() {
		if (this.contas == null) {
			EntityManager manager = this.getManager();
			ContaRepository repository = new ContaRepository(manager);
			this.contas = repository.getLista();
		}
		return this.contas;
	}

	public void setContas(List<Conta> contas) {
		this.contas = contas;
	}

	public List<Categoria> getCategorias() {
		if (this.categorias == null) {
			CategoriaRepository repository = new CategoriaRepository(
					this.getManager());
			this.categorias = repository.getLista();
		}
		return this.categorias;
	}

	public void setCategorias(List<Categoria> categorias) {
		this.categorias = categorias;
	}


	private EntityManager getManager() {
		FacesContext fc = FacesContext.getCurrentInstance();
		ExternalContext ec = fc.getExternalContext();
		HttpServletRequest request = (HttpServletRequest) ec.getRequest();
		return (EntityManager) request.getAttribute("EntityManager");
	}

}

Está eh a minha entidade de transações:

@Entity
public class Transacao {

	@Id
	@GeneratedValue
	private Long Id;
	private String Descricao;
	@Temporal(TemporalType.DATE)
	private Date DataTransacao;
	@Temporal(TemporalType.DATE)
	private Date DataVencimento;
	private Integer Status;
	@ManyToOne
	private Conta conta;
	@ManyToOne
	private Categoria categoria;
	private Double Valor;

	public Long getId() {
		return Id;
	}

	public void setId(Long id) {
		Id = id;
	}

	public String getDescricao() {
		return Descricao;
	}

	public void setDescricao(String descricao) {
		Descricao = descricao;
	}

	public Date getDataTransacao() {
		return DataTransacao;
	}

	public void setDataTransacao(Date dataTransacao) {
		DataTransacao = dataTransacao;
	}

	public Date getDataVencimento() {
		return DataVencimento;
	}

	public void setDataVencimento(Date dataVencimento) {
		DataVencimento = dataVencimento;
	}

	public Integer getStatus() {
		return Status;
	}

	public void setStatus(Integer status) {
		Status = status;
	}

	public Conta getConta() {
		return conta;
	}

	public void setConta(Conta conta) {
		this.conta = conta;
	}

	public Categoria getCategoria() {
		return categoria;
	}

	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}

	public Double getValor() {
		return Valor;
	}

	public void setValor(Double valor) {
		Valor = valor;
	}

}

e este é um dos converters que estou tentando utilizar:

@FacesConverter(value = "conta", forClass = Conta.class)
public class ContaSelectConverter implements Converter {

	@Override
	public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) {
		Long id = Long.valueOf(value);
		Utilidades utils = new Utilidades();
		ContaRepository repository = new ContaRepository(utils.getManager());
		return repository.procurar(id);
	}

	@Override
	public String getAsString(FacesContext arg0, UIComponent arg1, Object value) {
		if (value != null && value instanceof Conta) {
			Conta conta = (Conta) value;
			return conta.getDescricao();
		}
		return null;
	}

}

O primeiro problema que estou tentando é que ao clicar no botão salvar, está sendo enviado o conteudo do label do selectonemenu e não o value... o segundo problema é que mesmo modificando meu label para conter o id (no codigo final não poderia ficar assim mas testei....) o jsf retorna a seguinte mensagem: Selecione uma Categoria : Validation Error: Value is not valid

Se alguem puder me ajudar agradeço muitooooo.... se tiverem algum exemplo que use este tipo de estrutura vai me ajudar muito mesmo.... Meu unico problema é este maldito selectonemenu o resto está perfeito =/

4 Respostas

Hebert_Coelho

Você precisa de um converter. Esse post irá te ajudar: JSF: Converter e Bean Auto Complete

L

vlw pela dica. Agora o convert está funcionando. Porém eu tenho um outro problema agora. No momento de persistir a transação da o seguinte erro:

Nov 12, 2012 11:20:00 AM javax.faces.event.MethodExpressionActionListener processAction
SEVERE: 'javax.persistence.PersistenceException' recebido ao invocar escuta de ação '#{transacaoBean.adiciona}' para o componente 'ajax'
Nov 12, 2012 11:20:00 AM javax.faces.event.MethodExpressionActionListener processAction
SEVERE: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.pizzosoft.model.entities.Transacao
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1377)
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1300)
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1306)
	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:871)
	at br.com.pizzosoft.model.repositories.TransacaoRepository.adiciona(TransacaoRepository.java:20)
	at br.com.pizzosoft.managedbeans.TransacaoBean.adiciona(TransacaoBean.java:42)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:153)
	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
	at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
	at javax.faces.component.UICommand.broadcast(UICommand.java:300)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at br.com.pizzosoft.filters.JPAFilter.doFilter(JPAFilter.java:38)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at br.com.pizzosoft.filters.ControleDeAcesso.doFilter(ControleDeAcesso.java:30)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)
Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.pizzosoft.model.entities.Transacao
	at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:141)
	at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78)
	at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:844)
	at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:819)
	at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:823)
	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:865)
	... 40 more

Nov 12, 2012 11:20:00 AM com.sun.faces.context.AjaxExceptionHandlerImpl log
SEVERE: JSF1073: javax.faces.event.AbortProcessingException obtido durante o processamento de INVOKE_APPLICATION 5: UIComponent-ClientId=j_idt20:ajax, Message=javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.pizzosoft.model.entities.Transacao
Nov 12, 2012 11:20:00 AM com.sun.faces.context.AjaxExceptionHandlerImpl log
SEVERE: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.pizzosoft.model.entities.Transacao
javax.faces.event.AbortProcessingException: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.pizzosoft.model.entities.Transacao
	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:182)
	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
	at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
	at javax.faces.component.UICommand.broadcast(UICommand.java:300)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at br.com.pizzosoft.filters.JPAFilter.doFilter(JPAFilter.java:38)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at br.com.pizzosoft.filters.ControleDeAcesso.doFilter(ControleDeAcesso.java:30)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)
Caused by: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.pizzosoft.model.entities.Transacao
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1377)
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1300)
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1306)
	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:871)
	at br.com.pizzosoft.model.repositories.TransacaoRepository.adiciona(TransacaoRepository.java:20)
	at br.com.pizzosoft.managedbeans.TransacaoBean.adiciona(TransacaoBean.java:42)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:153)
	... 31 more
Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.pizzosoft.model.entities.Transacao
	at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:141)
	at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78)
	at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:844)
	at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:819)
	at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:823)
	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:865)
	... 40 more

Nov 12, 2012 11:20:00 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/FinancasBR] threw exception
java.lang.IllegalStateException: Transaction not active
	at org.hibernate.ejb.TransactionImpl.rollback(TransactionImpl.java:103)
	at br.com.pizzosoft.filters.JPAFilter.doFilter(JPAFilter.java:45)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at br.com.pizzosoft.filters.ControleDeAcesso.doFilter(ControleDeAcesso.java:30)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)

o meu convert agora ficou assim:

@FacesConverter(value = "categoria", forClass = Categoria.class)
public class CategoriaSelectConverter implements Converter {

	@Override
	public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) {
		FacesContext context = FacesContext.getCurrentInstance();
		CategoriaBean categoriaBean = (CategoriaBean) context.getELContext()
				.getELResolver()
				.getValue(context.getELContext(), null, "categoriaBean");
		return categoriaBean.getCategoriaByName(value);
	}

	@Override
	public String getAsString(FacesContext arg0, UIComponent arg1, Object value) {
		if (value != null && value instanceof Categoria) {
			Categoria categoria = (Categoria) value;
			return categoria.getDescricao();
		}
		return null;
	}

}

o meu método para buscar tanto a categoria quanto a conta ficaram uma gambiarra assim (cada um no seu respectivo managebean .... deu no mesmo colocar no transacaoBean que está no post inicial):

public Conta getContaByName(String descricao) {

		for (Conta c : this.getContas()) {
			if (c.getDescricao().equals(descricao)) {
				return c;
			}
		}
		return null;
	}
gambiarra feia... eu sei... mas ja fiz de inumeras formas e deu o mesmo erro acima, pelo menos com essa gambiarra da pra mostrar que o objeto está sim persistido na base....

Alguem saberia como contornar este problema? se eu carregar o id no meu selectonemenu e realizar uma consulta pelo id (EntityManager.find(Entity.class, PK)) e tentar persistir da o mesmo erro....

Hebert_Coelho

Na página sobre cascade explica sobre esse erro: JPA: Mini Livro - Primeiros passos e conceitos detalhados. [=

L

Cara vlw mesmo, esses links que você me passou ajudaram muito … muito mesmo… agora ta funcionando que é uma beleza!!! :smiley:

Criado 12 de novembro de 2012
Ultima resposta 12 de nov. de 2012
Respostas 4
Participantes 2