Entao, peguei outro exemplo e modifiquei… Achei esse exemplo melhor
http://www.guj.com.br/java/257236-jsf-20---como-pegar-objeto-inteiro-no-selectonemenu/2
Vou colocar aqui as modificacoes e o erro
import java.lang.reflect.Field;
import java.util.Collection;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;
/**
*
* @author Victor Lindberg
*
*/
@FacesConverter("selectOneUsingObjectConverter")
public class SelectOneUsingObjectConverter implements Converter{
@Override
public Object getAsObject(FacesContext context,
UIComponent component, String value) {
if (value == null || value.equals(""))
return null;
try{
Long id = Long.valueOf(value);
Collection items = (Collection) component.getAttributes().get("items");
return findById(items, id);
}catch(Exception ex){
throw new ConverterException("Não foi possível aplicar conversão de item com valor ["+value+"] no componente ["+component.getId()+"]", ex);
}
}
@Override
public String getAsString(FacesContext context, UIComponent component,
Object value) {
if (value == null)
return "";
return getIdByReflection(value).toString();
}
private Object findById(Collection collection, Long idToFind){
for (Object obj : collection){
Long id = getIdByReflection(obj);
if (id == idToFind)
return obj;
}
return null;
}
private Long getIdByReflection(Object bean){
try{
Field idField = bean.getClass().getDeclaredField("id");
idField.setAccessible(true);
return (Long) idField.get(bean);
}catch(Exception ex){
throw new RuntimeException("Não foi possível obter a propriedade 'id' do item",ex);
}
}
}
Nova Requisição
</ui:define>
<ui:define name="corpo">
<h:form id="cadastro">
<h:messages />
<br/>
<fieldset><legend>Requisição</legend>
<h:panelGrid columns="3">
<h:outputText value="Item:"/>
<h:selectOneMenu id="itemSelecionado" value="#{carrinhoBean.produtoSelecionado}" converter="itemConverter" items="#{itemBean.itens}">
<f:selectItem itemLabel="Selecione" itemValue=""/>
<f:selectItems
value="#{itemBean.itens}"
var ="itens"
itemValue="#{itens}"
itemLabel="#{itens.nome}"/>
</h:selectOneMenu>
@Entity
public class Produto implements Serializable{
private static final long serialVersionUID = -2477528265610024554L;
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;
public Item objetoItem;
public int quantidadeItem;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Item getObjetoItem() {
return objetoItem;
}
public void setObjetoItem(Item objetoItem) {
this.objetoItem = objetoItem;
}
public int getQuantidadeItem() {
return quantidadeItem;
}
public void setQuantidadeItem(int quantidadeItem) {
this.quantidadeItem = quantidadeItem;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result
+ ((objetoItem == null) ? 0 : objetoItem.hashCode());
result = prime * result + quantidadeItem;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Produto other = (Produto) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (objetoItem == null) {
if (other.objetoItem != null)
return false;
} else if (!objetoItem.equals(other.objetoItem))
return false;
if (quantidadeItem != other.quantidadeItem)
return false;
return true;
}
}
public class CarrinhoBean {
private Produto produto = new Produto();
ItemBean itemBean = new ItemBean();
private String car;
private Produto produtoSelecionado;
public List<Produto> lista = new ArrayList<Produto>();
public ArrayList<String> carrinhoSessao = new ArrayList<String>();
public String insere() {
Produto produto = new Produto();
produto.setObjetoItem(getProduto().getObjetoItem());
produto.setQuantidadeItem(getProduto().getQuantidadeItem());
lista.add(produto);
return null;
}
public String remove(Produto produto) {
lista.remove(produto);
return null;
}
public List<Produto> getLista() {
return lista;
}
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public Produto getProdutoSelecionado() {
return produtoSelecionado;
}
public void setProdutoSelecionado(Produto produtoSelecionado) {
this.produtoSelecionado = produtoSelecionado;
}
}
Esse eh o erro:
N�o foi poss�vel obter a propriedade ‘id’ do item
java.lang.RuntimeException: N�o foi poss�vel obter a propriedade ‘id’ do item
at requisicao.item.ItemConverter.getIdByReflection(ItemConverter.java:63)
at requisicao.item.ItemConverter.getAsString(ItemConverter.java:44)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:515)
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOption(MenuRenderer.java:530)
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:788)
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:840)
at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:294)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:879)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:308)
at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:181)
at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:125)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:849)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1643)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:164)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:849)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1643)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1646)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1646)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:389)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:127)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:117)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:311)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at requisicao.web.filter.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:32)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:344)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:110)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:98)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:95)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:79)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:55)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:36)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:188)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:106)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:150)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
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: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(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NoSuchFieldException: id
at java.lang.Class.getDeclaredField(Class.java:1882)
at requisicao.item.ItemConverter.getIdByReflection(ItemConverter.java:59)
… 67 more
Acho q tem algo errado na pagina jsf