[RESOLVIDO]Duvida com <h:selectOneMenu>

Galera estou com uma duvida cruel,
estou começando com jsf e hibernate e tenho um relacionamento OneToMany , no caso marca > produto
uma marca pode ter varios produtos e um produto uma unica marca,
no cadastro do produto queria pode mostrar as marcas ja cadastradas pra ele esta podendo escolher uma e relacionar ela com o produto
isso via <h:selectOneMenu> eu consigo listar as marcas nele so que nao consigo pegar o objeto (marca) que ele seliciono.
Alguem pode me dar uma luz

Você precisa criar uma classe converter para sua entidade marca. Assim você consegue recuperar o objeto dentro do seu h:selectOneMenu.

Eu faço um array de selectedItem e coloco as marcas com o código e descrição nesse array e ao selecionar uma marca será atribuído o código da mesma.

galera mais não tenho nem ideia de como fazer isso
se vocês puderem me ajudar…

eu procurei alguns tópicos aki no forum mais estão muito confusos ou a pessoa não coloca o resultado dela,e na internet ta mais fda ainda

Segue exemplo abaixo:

Bean

public List<SelectItem> getMarcas() { this.marcas = new ArrayList<SelectItem>(); List<Marca> mar = marcaDAO.getMarcas(); this.marcas .add(new SelectItem(0, "Selecione")); for (Marca m : mar) { this.marcas .add(new SelectItem(m.getId(), m.getDescricao())); } return this.marcas ; }

XHTML

<h:outputText value="Marca" /> <h:selectOneMenu id="marca" value="#{bean.classe.marca.id}"> <f:selectItems value="#{bean.marcas}" /> </h:selectOneMenu>

mais nesse caso como vou faer o relacionamento
como vo atribuir o produto a esta marca ?
se puder postar o codigo deste bean completo vou agradecer.

[code]private long id;
private List listamarca;
private ArrayList marca;
private Produto produto;

public List<SelectItem> getMarcas(){
	this.marca = new  ArrayList<SelectItem>();
	if (listamarca == null) {
		listamarca = (List<Marca>) new MarcaDao().listaMarca();
	}
	this.marca.add(new SelectItem(0,"Selecione"));
	for(Marca m:listamarca){
		this.marca.add(new SelectItem(m.getIdMarca(),m.getMarca()));
	}
	
	return this.marca;
}

[/code]

seria mais ou menos isso meu bean?

vish…
agora ele ta me retornando nulo
falando que meu objeto ta nulo
¬¬

Deve ter esquecido de “dar new” nele.

A lista de SelectItem so é Obrigatória no JSF1.2.
no JSF2 vc pode utilizar diretamente a lista do seu próprio objeto que seria o “Produto”.

Existem algumas maneiras de se fazer isto, mais pelo meu ponto de vista a mais correta seria a implementação de um converter.
Este converter serve para informar ao componente como ele deve escrever o seu item do combo na pagina e como ele deve realizar o caminho inverso (tornar aquela string em um objeto).

Pesquise por converter JSF no google que vc encontrara muito material.

abç

pesquisei mais nao axei nada muito didatico não
ainda to agarrado nsito

Olá pessoal, aproveitando o tópico

estou com uma duvida referente a um selectOneMenu tambem. Preciso realizar a seguinte função:

  • Tenho duas tabelas: Cliente e Atendimento (relacionamento 1xN)

  • O formulario que popula a tabela cliente, tem os dados: nome, endereço, bairro, cep, telefone, … (cadastro básico de clientes)
    Até aqui tudo bem cadastra, edita, consulta e exclui normalmente, a minha duvida começa agora:

  • No formulario para popular a tabela Atendimento tenho os seguintes inputText: Codigo, Cliente, Endereço, Bairro, Problema, Descrição.

  • Para o campo cliente, tenho um selectOneMenu que busca o nome do cliente na tabela Cliente (consigo fazer ate esse ponto)
    O que preciso fazer é, quando selecionar um cliente nesse selectOneMenu, sejam carregados os respectivos dados desse cliente nos campos Endereco e Bairro
    para que não seja necessário cadastrar os dados do cliente novamente. Após carregar esses dados, termino de preencher os dados Problema e Descrição e salvo nessa tabela Atendimento.

É possivel fazer isso? Eu sei que preciso relacionar as tabelas, o que já foi feito, porém nao sei qual seria o proximo passo para realizar essa tarefa.

Podem me dar uma ajuda?? Utilizo JSF2 + Primefaces 3.3 + Mysql 5 + Eclipse Helios.

Obrigado.

ninguem?
help galera

Geeh_All,

Qual a sua dúvida/problema neste momento? Dificuldade em conseguir montar um Converter, como sugerido pelo Lucas Abbatepaolo? Você procurou materiais/links? Teve dúvidas neles?

Ou você está com dificuldade em algum outro ponto? Neste caso, qual seria?

Lembre-se que o fórum não é para postar solução de problemas, e sim para te ajudar a resolvê-los.

ahdeerre,

Sim, é possível fazer isso. Procure exemplos de utilização de Ajax. O Showcase do Primefaces tem bosn exemplos.

Alys,

eis o meu bean


package visao;

import implementacoes.InterfaceBean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.model.SelectItem;

import org.primefaces.event.RowEditEvent;

import dao.MarcaDao;
import dao.ObjectDao;
import entidade.Marca;
import entidade.Produto;


/**
 * Bean da classe Produto responsavel por gerenciar os produtos na cama de visão
 * Como faz conexão com o banco e sai da JVM implementa Serializable.
 * implementa InterfaceBean que tem os metodos basicos dos Bean da aplicação(camada de visão)
 * @author Rangel
 * @version 1.0
 * @since 25/09/2012
 * @see implementacoes.InterfaceBean
 * @see java.lang.Object
 * @see java.io.Serializable
 */
@ManagedBean(name="produtobean")
@RequestScoped
public class ProdutoBean implements Serializable,InterfaceBean {

	/**
	 * numero gerado aleatoriamente pela Serializable 
	 * @serial serialVersionUID
	 */
	private static final long serialVersionUID = -9193715420049605319L;

	
	private long id;
	private List<Marca> listamarca;
	private ArrayList<SelectItem> marcas;
	private Produto produto ;
	private Marca marca;

	public List<SelectItem> getMarcas(){
			if (marcas == null) {
				
		
		this.marcas = new  ArrayList<SelectItem>();
		if (listamarca == null) {
			listamarca = (List<Marca>) new MarcaDao().listaMarca();
		}
		this.marcas.add(new SelectItem(0,"Selecione"));
		for(Marca m:listamarca){
			this.marcas.add(new SelectItem(m.getIdMarca(),m.getMarca()));
		}
		
			}
		return this.marcas;
	}
	public void setMarca(Marca marca) {
		this.marca = marca;
	}


	public Produto getProduto() {
		return produto;
	}


	public void setProduto(Produto produto) {
		this.produto = produto;
	}


	public ArrayList<SelectItem> getMarca() {
		return marcas;
	}


	public void setMarca(ArrayList<SelectItem> marca) {
		this.marcas = marca;
	}


	public List<Marca> getListamarca() {
		if (listamarca == null) {
			listamarca = (List<Marca>) new MarcaDao().listaMarca();
		}
		
		return this.listamarca;
	}
	
	public long getId() {
		return id;
	}


	public void setId(long id) {
		this.id = id;
	}


	public void setListamarca(List<Marca> listamarca) {
		this.listamarca = listamarca;
	}


	public List<Object> listarObject() {
		return null;
	}

	public Object prepararAdicionarObject() {
		produto = new Produto();
		return produto;
	}

	public void editObject(RowEditEvent event) {
		
	}

	public String deleteObject(RowEditEvent event) {
		return null;
	}

	public void saveObject() {
		ObjectDao dao = new ObjectDao();
		dao.save(produto);
	}

}

eis o meu converter


package implementacoes;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

import dao.MarcaDao;
import entidade.Marca;

@FacesConverter(value="converterMarca")
public class ConverterMarca implements Converter {

	@Override
	public Object getAsObject(FacesContext context, UIComponent component, String value) {
		if (value != null && !value.equals("")) {
		MarcaDao dao = new MarcaDao();
		return dao.find(Long.valueOf(value));
		}
		return null;
	}

	@Override
	public String getAsString(FacesContext context, UIComponent component, Object value) {
		if (value instanceof Marca) {
		Marca marca = (Marca) value;
		return String.valueOf(marca.getIdMarca());
		}
		return "";
	}

}

eis a minha view jsf


<!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:p="http://primefaces.org/ui">

<h:head></h:head> 
<h:body> 
<h:form id="teste">
<p:commandLink value="Novo Livro"
					actionListener="#{produtobean.prepararAdicionarObject()}"
					onclick="adicionarUsuario.show()" />
					</h:form>
<p:dialog header="Cadastro Usuario" id="newuser"
		widgetVar="adicionarUsuario" dynamic="true" showEffect="slide">

	<h:form id="cadastro">
		<h:panelGrid id="cadastroProduto" columns="2" >
			<h:outputLabel for="produto" value="Produto: " />
			<h:inputText id="produto" value="#{produtobean.produto.produto}"/>
			
			<h:outputLabel for="marca" value="Marca" />  
   				 <h:selectOneMenu id="marca" value="#{produtobean.produto.marca}">  
        			  <f:selectItems value="#{produtobean.marcas}" />
        			  <f:converter converterId="converterMarca"/>
				</h:selectOneMenu>  
				<p:commandButton actionListener="#{produtobean.saveObject()}" value="Cadastrar"/>
		</h:panelGrid>
	</h:form>
	</p:dialog>

</h:body> 
</html>

a minha duvida e ele me retorna esta mensagem GRAVE: org.hibernate.exception.ConstraintViolationException: Column ‘marca_idMarca’ cannot be null

Geeh_All,

Não tem stack trace do erro no log? Outra: você já debugou o ConverterMarca para ver o que está sendo feito e quais valores estão chegando?

Não sei como está a sua classe Marca, mas, considere que, para evitar erros de validação do JSF, você precisa sobrescrever o equals() e o hashCode() da classe.

Como o pessoal falou, a melhor forma é voce utilizar um Converter, pois assim, ele já vai setar a entidade direto na tua classe, assim que voce selecionar o <H:selectOneMenu />

da uma olhada nesse exemplo nesse site, muito bom

http://www.rponte.com.br/tag/entity-converter/

help?

alys eu ja sobrescrevi os metodos sim…
e ele continua dando erro ,debuguei aqui e acho que ele nem chega a chamar o converter
segue o erro em sí

GRAVE: org.hibernate.exception.ConstraintViolationException: Column 'marca_idMarca' cannot be null
	at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:74)
	at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
	at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129)
	at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
	at $Proxy22.executeUpdate(Unknown Source)
	at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:96)
	at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:58)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2870)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3381)
	at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81)
	at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362)
	at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:203)
	at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:183)
	at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:167)
	at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:320)
	at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:287)
	at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193)
	at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126)
	at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204)
	at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
	at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189)
	at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
	at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
	at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:757)
	at org.hibernate.internal.SessionImpl.save(SessionImpl.java:749)
	at org.hibernate.internal.SessionImpl.save(SessionImpl.java:745)
	at dao.ObjectDao.save(ObjectDao.java:47)
	at visao.ProdutoBean.saveObject(ProdutoBean.java:121)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:264)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:148)
	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
	at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:777)
	at javax.faces.component.UICommand.broadcast(UICommand.java:300)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252)
	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:508)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
	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:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	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:1001)
	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$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'marca_idMarca' cannot be null
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
	at com.mysql.jdbc.Util.getInstance(Util.java:386)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1040)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2468)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2629)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2719)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2450)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2371)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2355)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
	... 58 more

08/10/2012 10:14:01 com.sun.faces.context.AjaxExceptionHandlerImpl log
GRAVE: JSF1073: javax.faces.event.AbortProcessingException obtido durante o processamento de INVOKE_APPLICATION 5: UIComponent-ClientId=cadastro:j_idt9, Message=/produto.xhtml @28,86 actionListener="#{produtobean.saveObject()}": org.hibernate.exception.ConstraintViolationException: Column 'marca_idMarca' cannot be null
08/10/2012 10:14:01 com.sun.faces.context.AjaxExceptionHandlerImpl log
GRAVE: /produto.xhtml @28,86 actionListener="#{produtobean.saveObject()}": org.hibernate.exception.ConstraintViolationException: Column 'marca_idMarca' cannot be null
javax.faces.event.AbortProcessingException: /produto.xhtml @28,86 actionListener="#{produtobean.saveObject()}": org.hibernate.exception.ConstraintViolationException: Column 'marca_idMarca' cannot be null
	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:777)
	at javax.faces.component.UICommand.broadcast(UICommand.java:300)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252)
	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:508)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
	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:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	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:1001)
	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$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: org.hibernate.exception.ConstraintViolationException: Column 'marca_idMarca' cannot be null
	at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:74)
	at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
	at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129)
	at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
	at $Proxy22.executeUpdate(Unknown Source)
	at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:96)
	at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:58)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2870)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3381)
	at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81)
	at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362)
	at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:203)
	at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:183)
	at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:167)
	at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:320)
	at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:287)
	at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193)
	at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126)
	at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204)
	at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
	at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189)
	at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
	at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
	at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:757)
	at org.hibernate.internal.SessionImpl.save(SessionImpl.java:749)
	at org.hibernate.internal.SessionImpl.save(SessionImpl.java:745)
	at dao.ObjectDao.save(ObjectDao.java:47)
	at visao.ProdutoBean.saveObject(ProdutoBean.java:121)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:264)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:148)
	... 25 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'marca_idMarca' cannot be null
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
	at com.mysql.jdbc.Util.getInstance(Util.java:386)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1040)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2468)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2629)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2719)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2450)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2371)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2355)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
	... 58 more

Pro metodo saveObject() ser um actionListener vc precisa passar um ActionEvent pra ele.

Portanto das duas uma:

  • Muda de actionListener pra action e mantem saveObject();
  • Muda a assinatura pra saveObject(ActionEvent evt);