Salvando nova Entidade com p:autoComplete

Olá pessoal, eu estou com o seguinte problema.
Estou tentando fazer um cadastro de veículo, mas queria deixar alguns campos cadastráveis.
Por Ex: no campo Cor.
O p:autoComplete irá tentar buscar a cor no BD, mas se caso ele não encontrar, salvar no campo Cor do veiculo a string que estiver no p:autoComplete.

Meu codigo está funcionando para cores que já estão cadastradas no BD, meu problema é cadastrar uma nova cor através da string do p:autoComplete.

<p:outputLabel for="autoCompCores" value="Cor"/> <p:autoComplete id="autoCompCores" size="12" value="#{veiculoAcao.entidade.cor}" disabled="#{veiculoAcao.travado}" required="true" completeMethod="#{corDao.listaCores}" var="cor" itemLabel="#{cor.descricao}" itemValue="#{cor}" onfocus="this.select();" onclick="this.select();"> <p:column>#{cor.descricao}</p:column> <s:convertEntity/> </p:autoComplete>

esse código dispara um java.lang.NumberFormatException antes mesmo de entrar no método salvar() da minha classe veiculoAcao

17:25:46,280 AVISO [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-localhost-127.0.0.1-8080-1) For input string: "vermelho": java.lang.NumberFormatException: For input string: "vermelho" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) [rt.jar:1.6.0_45] at java.lang.Integer.parseInt(Integer.java:449) [rt.jar:1.6.0_45] at java.lang.Integer.<init>(Integer.java:660) [rt.jar:1.6.0_45] at org.jboss.seam.ui.EntityIdentifierStore.get(EntityIdentifierStore.java:46) [jboss-seam-ui-2.3.0.Final.jar:2.3.0.Final] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.6.0_45] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [rt.jar:1.6.0_45] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [rt.jar:1.6.0_45] at java.lang.reflect.Method.invoke(Method.java:597) [rt.jar:1.6.0_45] at org.jboss.seam.util.Reflections.invoke(Reflections.java:22) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:32) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:28) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.core.SynchronizationInterceptor.aroundInvoke(SynchronizationInterceptor.java:35) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:186) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:104) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.ui.EntityIdentifierStore_$$_javassist_seam_31.get(EntityIdentifierStore_$$_javassist_seam_31.java) [jboss-seam-ui-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.ui.AbstractEntityLoader.get(AbstractEntityLoader.java:27) [jboss-seam-ui-2.3.0.Final.jar:2.3.0.Final] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.6.0_45] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [rt.jar:1.6.0_45] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [rt.jar:1.6.0_45] at java.lang.reflect.Method.invoke(Method.java:597) [rt.jar:1.6.0_45] at org.jboss.seam.util.Reflections.invoke(Reflections.java:22) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:32) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:28) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.transaction.TransactionInterceptor$1.work(TransactionInterceptor.java:97) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.util.Work.workInTransaction(Work.java:61) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.transaction.TransactionInterceptor.aroundInvoke(TransactionInterceptor.java:91) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:186) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:104) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.ui.JpaEntityLoader_$$_javassist_seam_30.get(JpaEntityLoader_$$_javassist_seam_30.java) [jboss-seam-ui-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.ui.EntityConverter.getAsObject(EntityConverter.java:78) [jboss-seam-ui-2.3.0.Final.jar:2.3.0.Final] at org.primefaces.component.autocomplete.AutoCompleteRenderer.getConvertedValue(AutoCompleteRenderer.java:533) [primefaces-3.4.1.jar:] at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] at javax.faces.component.UIInput.validate(UIInput.java:960) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] at javax.faces.component.UIInput.executeValidate(UIInput.java:1233) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] at javax.faces.component.UIInput.processValidators(UIInput.java:698) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] at org.primefaces.component.panel.Panel.processValidators(Panel.java:293) [primefaces-3.4.1.jar:] at javax.faces.component.UIForm.processValidators(UIForm.java:253) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:] at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79) [primefaces-3.4.1.jar:] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.web.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:42) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) [jboss-seam-2.3.0.Final.jar:2.3.0.Final] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:397) [jbossweb-7.0.13.Final.jar:] at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final] at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:] at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_45]

se alguém souber me ajudar, eu agradeço !

o que está acontecendo é que você está trabalhando em um auto complete com
um objeto criado por você, se não me engano você tem que implementar algumas
coisas nesse teu objeto para conseguir faze-lo funcionar.

agora para salvar seria algo também complicado por ser um objeto,

tente passar melhor o que você precisa, como é seu objeto persistido,
os métodos utilizados.

com o que tem só posso dizer isso :frowning:

O que será que tenho que implementar na minha classe para poder persistir meu objeto ?

Salvar não é o problema … já que se eu fizer o processo em duas etapas …
Cadastrar a cor, depois salvar a cor no veiculo através do autocomplete funciona certinho …

meu problema está em fazer os dois ao mesmo tempo :smiley:

alguém tem alguma ideia do que pode estar acontecendo ?

Consegui resolver o problema !

no meu caso, o problema estava no converter, então tive que fazer um novo converter

@Name("corConverter")
@BypassInterceptors
@org.jboss.seam.annotations.faces.Converter
public class CorConverter implements Converter {

	@Override  
	public Object getAsObject(FacesContext context, UIComponent component, String value) {  
		CorDao corDao = (CorDao) Component.getInstance("corDao");
		Cor cor = corDao.buscaUmaCor(value);
		
		if(cor == null){
			try {
				cor = new Cor();
				cor.setDescricao(value);
				corDao.salvar(cor);
			} catch (ExcecaoPersistencia e) {
				e.printStackTrace();
			}
		}
		
		return cor;
	}  

	@Override  
	public String getAsString(FacesContext context, UIComponent component, Object value) {  
		Cor c = (Cor) value;  
		return c.getDescricao();  
	}  
}

e no xhtml fica assim:

<p:outputLabel for="cor" value="Cor" />
						<p:autoComplete id="cor" size="12" value="#{veiculoAcao.entidade.cor}" disabled="#{veiculoAcao.travado}" required="true" 
								completeMethod="#{corDao.listaCores}" var="cor" itemLabel="#{cor.descricao}" itemValue="#{cor}"
								onfocus="this.select();" onclick="this.select();" converter="corConverter">
							<p:column>#{cor.descricao}</p:column>
						</p:autoComplete>

então, agora toda vez que salvar um veiculo, ele busca já existe aquela cor no banco, se não existir ele adiciona…

Pode fechar o tópico ADMs