Dificuldades em preencher selectOneMenu - PrimeFaces

Olá!
Bom galera… Faz uma semana que venho desenvolvendo um novo projeto para o meu TCC, um sistema Web usando JSF, CDI, PrimeFaces e Hibernate, tenho muito pouco contato com projetos para web

Estou com dificuldades em preencher os dados de um selectOneMenu com valores do banco de dados.
Na minha ultima tentativa, não consegui encontrar a origem deste erro:

dez 06, 2016 4:29:59 PM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException GRAVE: Error Rendering View[/Produto.xhtml] javax.el.ELException: /Produto.xhtml @58,57 value="#{cadastroProdutoBean.ncms}": Error reading 'ncms' on type br.com.hsi.nfe.controller.CadastroProdutoBean$Proxy$_$$_WeldClientProxy at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114) at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) at javax.faces.component.UISelectItems.getValue(UISelectItems.java:129) at org.primefaces.renderkit.InputRenderer.getSelectItems(InputRenderer.java:54) at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeMarkup(SelectOneMenuRenderer.java:80) at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeEnd(SelectOneMenuRenderer.java:74) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863) at org.primefaces.component.panelgrid.PanelGridRenderer.encodeGridBody(PanelGridRenderer.java:236) at org.primefaces.component.panelgrid.PanelGridRenderer.encodeGridLayout(PanelGridRenderer.java:90) at org.primefaces.component.panelgrid.PanelGridRenderer.encodeEnd(PanelGridRenderer.java:40) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863) at javax.faces.render.Renderer.encodeChildren(Renderer.java:176) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:890) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:458) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:134) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:659) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:745) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source) Caused by: javax.el.ELException: Error reading 'ncms' on type br.com.hsi.nfe.controller.CadastroProdutoBean$Proxy$_$$_WeldClientProxy at javax.el.BeanELResolver.getValue(BeanELResolver.java:98) at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) at org.apache.el.parser.AstValue.getValue(AstValue.java:169) at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184) at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50) at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) ... 47 more Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 0 at java.lang.String.charAt(Unknown Source) at org.hibernate.type.descriptor.java.CharacterTypeDescriptor.wrap(CharacterTypeDescriptor.java:61) at org.hibernate.type.descriptor.java.CharacterTypeDescriptor.wrap(CharacterTypeDescriptor.java:16) at org.hibernate.type.descriptor.sql.VarcharTypeDescriptor$2.doExtract(VarcharTypeDescriptor.java:62) at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47) at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:258) at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:254) at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:244) at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:327) at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2775) at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1741) at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1667) at org.hibernate.loader.Loader.getRow(Loader.java:1556) at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:740) at org.hibernate.loader.Loader.processResultSet(Loader.java:985) at org.hibernate.loader.Loader.doQuery(Loader.java:943) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:349) at org.hibernate.loader.Loader.doList(Loader.java:2615) at org.hibernate.loader.Loader.doList(Loader.java:2598) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2430) at org.hibernate.loader.Loader.list(Loader.java:2425) at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:502) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:371) at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216) at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1459) at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1426) at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1398) at org.hibernate.Query.getResultList(Query.java:417) at br.com.hsi.nfe.repository.ProdutoRepository.listaNcm(ProdutoRepository.java:37) at br.com.hsi.nfe.service.GestaoProduto.listaNcm(GestaoProduto.java:39) at br.com.hsi.nfe.service.GestaoProduto$Proxy$_$$_WeldSubclass.listaNcm(Unknown Source) 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.jboss.weld.interceptor.proxy.SimpleInterceptionChain.interceptorChainCompleted(SimpleInterceptionChain.java:51) at org.jboss.weld.interceptor.chain.AbstractInterceptionChain.invokeNextInterceptor(AbstractInterceptionChain.java:96) at org.jboss.weld.interceptor.proxy.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:149) at br.com.hsi.nfe.util.TransacionalInterceptor.invoke(TransacionalInterceptor.java:43) 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.jboss.weld.interceptor.reader.SimpleInterceptorInvocation$SimpleMethodInvocation.invoke(SimpleInterceptorInvocation.java:74) at org.jboss.weld.interceptor.chain.AbstractInterceptionChain.invokeNext(AbstractInterceptionChain.java:116) at org.jboss.weld.interceptor.chain.AbstractInterceptionChain.invokeNextInterceptor(AbstractInterceptionChain.java:94) at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeInterception(InterceptorMethodHandler.java:43) at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.invoke(InterceptorMethodHandler.java:36) at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:51) at br.com.hsi.nfe.service.GestaoProduto$Proxy$_$$_WeldSubclass.listaNcm(Unknown Source) at br.com.hsi.nfe.controller.CadastroProdutoBean.getNcm(CadastroProdutoBean.java:57) at br.com.hsi.nfe.controller.CadastroProdutoBean.getNcms(CadastroProdutoBean.java:62) at br.com.hsi.nfe.controller.CadastroProdutoBean$Proxy$_$$_WeldClientProxy.getNcms(Unknown Source) 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 javax.el.BeanELResolver.getValue(BeanELResolver.java:94) ... 53 more

Esses são os dois selectOneMenu que estou tentando preencher (xhtml)

`

		<p:outputLabel value="Ncm:" for="ncm" />
				<p:selectOneMenu id="ncm"
					value="#{cadastroProdutoBean.produto.ncm.id}">
					<f:selectItem itemValue="" itemLabel="Selecione..." />
					<f:selectItems value="#{cadastroProdutoBean.ncms}"
						itemValue="#{cadastroProdutoBean.ncms.get(0)}" />
				</p:selectOneMenu>

				<p:outputLabel value="Cest:" for="cest" />
				<p:selectOneMenu id="cest"
					value="#{cadastroProdutoBean.produto.cest.id}">
					<f:selectItem itemValue="" itemLabel="Selecione..." />
					<f:selectItems value="#{cadastroProdutoBean.cests}"
						itemValue="#{cadastroProdutoBean.cests}" />

				</p:selectOneMenu>`

o meu Bean:

`

@Inject
private GestaoProduto gestaoProduto;

private static final long serialVersionUID = 1L;
private Produto produto = new Produto();
private List<Ncm> ncm;
private List<SelectItem> ncms;
private List<Cest> cest;
private List<SelectItem> cests;

public void salvar() {
	gestaoProduto.salvar(produto);
	produto = new Produto();
	FacesMessage msg = new FacesMessage("Produto Salvo com sucesso!");
	FacesContext.getCurrentInstance().addMessage(null, msg);
}

public void excluir() {
	gestaoProduto.excluir(produto);

	FacesMessage msg = new FacesMessage("Produto removido com sucesso!");
	FacesContext.getCurrentInstance().addMessage(null, msg);
}

public Produto getProduto() {
	return produto;
}

public List<Ncm> getNcm() {
	ncm = gestaoProduto.listaNcm();
	return ncm;
}
public List<SelectItem> getNcms() {
	ncms = new ArrayList<SelectItem>();
	for(Ncm ncm : getNcm()){
		ncms.add(new SelectItem(ncm.getId(), ncm.getNcm()));
	}
	return ncms;
}

public List<Cest> getCest() {
	cest = gestaoProduto.listaCest();
	return cest;
}

public List<SelectItem> getCests() {
	cests = new ArrayList<SelectItem>();
	for(Cest cest : getCest()){
		cests.add(new SelectItem(cest.getId(), cest.getCest()));
	}
	return cests;
}

`

Não sei como corrigir este erro se alguém conseguir me ajudar… hehe

Desde já eu agradeço a todos!!!

Brother o selectOneMenu trabalha que nem o forEach, então vamos modificar um dos selectOneMenu.


<p:selectOneMenu id="ncm"
	value="#{cadastroProdutoBean.produto.ncm.id}">
	<f:selectItem itemValue="" itemLabel="Selecione..." />
	<f:selectItems value="#{cadastroProdutoBean.ncms}" var="ncm"
	itemValue="#{ncm.id}" itemDisplay="#{ncm.descricao}"/>
</p:selectOneMenu>
//coloquei ncm.descricao pq nao conheço esta classe...

E mais uma coisa tipa esta List com o tipo da classe em list mesmo. Aquele SelectItem que vc pegou ali é uma classe que o prime usa mas vc nao precisa usar ela. Pode tipar p/ List.
Altera o outro selectOneMenu agora e vê se vai dar tudo certo.

Não preciso usar List<SelectItem>?

Nessa parte:

`

public List<Ncm> getNcm() {   
ncm = gestaoProduto.listaNcm();
return ncm;
}

public List<Cest> getCest() {
cest = gestaoProduto.listaCest();
return cest;
}`

Bom… eu modifiquei esse trecho do código como sugeriu, também removi os List<SelctItem>
Mas o erro ainda persiste…

Posta como ficou por gentileza as alterações…

O Arquivo de xhtml:
`

				<p:selectOneMenu id="ncm"
					value="#{cadastroProdutoBean.produto.ncm.id}">
					<f:selectItem itemValue="" itemLabel="Selecione..." />
					<f:selectItems value="#{cadastroProdutoBean.ncm}" var="ncm"
						itemValue="#{ncm.id}" itemDisplay="#{ncm.ncm}" />
				</p:selectOneMenu>

				<p:selectOneMenu id="cest"
					value="#{cadastroProdutoBean.produto.cest.id}">
					<f:selectItem itemValue="" itemLabel="Selecione..." />
					<f:selectItems value="#{cadastroProdutoBean.cest}" var="cest"
						itemValue="#{cest.id}" itemDisplay="#{cest.cest}" />
				</p:selectOneMenu>`

Bean:

`
@Named
@ViewScoped
public class CadastroProdutoBean implements Serializable {

@Inject
private GestaoProduto gestaoProduto;

private static final long serialVersionUID = 1L;
private Produto produto = new Produto();
private List<Ncm> ncm;
private List<Cest> cest;

public void salvar() {
	gestaoProduto.salvar(produto);
	produto = new Produto();
	FacesMessage msg = new FacesMessage("Produto Salvo com sucesso!");
	FacesContext.getCurrentInstance().addMessage(null, msg);
}

public void excluir() {
	gestaoProduto.excluir(produto);

	FacesMessage msg = new FacesMessage("Produto removido com sucesso!");
	FacesContext.getCurrentInstance().addMessage(null, msg);
}

public Produto getProduto() {
	return produto;
}

public List<Ncm> getNcm() {
	ncm = gestaoProduto.listaNcm();
	return ncm;
}

public List<Cest> getCest() {
	cest = gestaoProduto.listaCest();
	return cest;
}

}`

Dentro destas classes tem algum substring errado, assim lançando a exception. Verifica se acha algo de errado senao posta o código p/ analisar.

Aparentemente esta tudo correto por aqui… nessa classe eu inicio o EntityManager

private static final long serialVersionUID = 1L;

@Inject
private EntityManager manager;

public Produto salvar(Produto produto){
	return manager.merge(produto);
}

public void exclui(Produto produto){
	this.manager.remove(produto);
}

public List<Produto> listaProduto(){
	TypedQuery<Produto> selectQuery = manager.createQuery("FROM Produto", Produto.class);
	List<Produto> listaProduto = selectQuery.getResultList();
	return listaProduto;
}

public List<Ncm> listaNcm(){
	TypedQuery<Ncm> selectQuery = manager.createQuery("FROM Ncm", Ncm.class);
	List<Ncm> listaNcm = selectQuery.getResultList();
	return listaNcm;
}
public List<Cest> listaCest(){
	TypedQuery<Cest> selectQuery = manager.createQuery("FROM Cest", Cest.class);
	List<Cest> listaCest = selectQuery.getResultList();
	return listaCest;
}

É um erro chato mesmo cara, paciência. Tou olhando problemas semelhantes ao seu envolvendo esta exception e o hibernate. Vamos ver se a classe Ncm está certo os atributos, e já aproveitando verifica este select no seu BD vê o que retorna, veja se há algo de espaços em branco em alguma coluna. Com base:
StringIndexOutOfBoundsException 1
StringIndexOutOfBoundsException 2

Muito obrigado pela sua atenção!

Certo, vou dar uma olhada aqui…

Bom dia!
Obrigado pela ajuda RaulCrash, consegui resolver este problema, como o banco de dados não foi eu quem desenvolvi resolvi e como sugeriu resolvi verificar, encontrei algumas linhas em branco que causaram todo esse transtorno!

1 curtida