Problema PrimeFaces + JPA + JSF2 + Selectonemenu

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:

[code]<?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” />

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

	&lt;p:separator&gt;&lt;/p:separator&gt;

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

		&lt;p:outputLabel value="Data de Vencimento" for="campo-data-vencimento" /&gt;
		&lt;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" /&gt;
		&lt;p:message for="campo-data-vencimento" /&gt;
		&lt;p:tooltip for="campo-data-vencimento"
			value="Por favor preencha uma descrição para a transação"
			showEffect="slide" hideEffect="explode"&gt;&lt;/p:tooltip&gt;

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

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

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

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

</ui:composition>[/code]

este é meu managedbean:

[code]@ManagedBean
public class TransacaoBean {

private Transacao transacao = new Transacao();

private List&lt;Conta&gt; contas;

private List&lt;Transacao&gt; transacoes;

private List&lt;Categoria&gt; 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&lt;String, String&gt; 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&lt;String, String&gt; 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&lt;Transacao&gt; 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&lt;Transacao&gt; transacoes) {
	this.transacoes = transacoes;
}

public List&lt;Conta&gt; 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&lt;Conta&gt; contas) {
	this.contas = contas;
}

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

public void setCategorias(List&lt;Categoria&gt; 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");
}

}
[/code]

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

[code]@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;
}

}
[/code]

e este é um dos converters que estou tentando utilizar:

[code]@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;
}

}
[/code]

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 =/

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

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:

[code]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)

[/code]

o meu convert agora ficou assim:

[code]@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;
}

}
[/code]

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):

[code]public Conta getContaByName(String descricao) {

	for (Conta c : this.getContas()) {
		if (c.getDescricao().equals(descricao)) {
			return c;
		}
	}
	return null;
}[/code] 

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…

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

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