[Resolvido] Duvida ArrayList!

12 respostas
tiago_

Pessoal

Eh o seguinte: Eu tenho esse selectOneMenu aqui:

<h:selectOneMenu id="itemSelecionado" value="#{carrinhoBean.produto.objetoItem}">
 				<f:selectItem itemLabel="Selecione" itemValue=""/>  
 				<f:selectItems 
 					value="#{itemBean.itens}"
 					var ="itens"
					itemValue="#{itens}"
					itemLabel="#{itens.nome}"/>
				</h:selectOneMenu>

from Item i where i.ativo=true order by i.nome asc

Eu preciso add nesse arrayList public List<Produto> lista = new ArrayList<Produto>(); Esse objeto item…

Minha classe produto tem 2 atributos:

objetoItem --> Tipo Item
quantidadeItem–> Tipo int

Eh possivel fazer isso ?

No selectOneMenu eu preciso mostrar apenas o nome do item… Qnd eu for listar o arrayList eu tb so preciso mostrar apenas o nome do item.

[]'s

12 Respostas

Rodrigo_Sasaki

Na sua descrição só consegui identificar uma dúvida. Então lá vai a resposta:

É possível sim.

tiago_

Rodrigo Sasaki:
Na sua descrição só consegui identificar uma dúvida. Então lá vai a resposta:

É possível sim.

Qual foi a duvida q vc identificou ?

Rodrigo_Sasaki
tiago_

Q bom… Entao, estou tentando fazer isso e estou com um problema…

Tenho essa pagina aqui:

<fieldset><legend>Requisição</legend>
				<h:panelGrid columns="3">
				<h:outputText value="Item:"/>  
        		<h:selectOneMenu id="itemSelecionado" value="#{carrinhoBean.produto.objetoItem}">
 				<f:selectItem itemLabel="Selecione" itemValue=""/>  
 				<f:selectItems 
 					value="#{itemBean.itens}"
 					var ="itens"
					itemValue="#{itens}"
					itemLabel="#{itens.nome}"/>
				</h:selectOneMenu>	
				<br/>
				<h:outputLabel value="Quantidade:" for="quantidadeItem" />
				<h:inputText id="quantidadeItem" label="Quantidade"
					value="#{carrinhoBean.produto.quantidadeItem}" required="true" size="4"/>
				<br/>	
				<h:commandButton action="#{carrinhoBean.insere}"  value="Adicionar" />
				</h:panelGrid>
				</fieldset>	
				
				<br/>
				<br/>
				<fieldset><legend>Meus Itens</legend>
				<h:panelGrid columns="3">
				<h:dataTable value="#{carrinhoBean.lista}" var="car" rules="rows" >  
                <f:facet name="caption">  
                    <br />  
                </f:facet>  
              
               <h:column>
                    <f:facet name="header">Nome do Item</f:facet>  
                  <h:outputText value="#{car.objetoItem}" /> 
                </h:column>  
                <h:column>  
                    <f:facet name="header">Qntd. Solicitada</f:facet>  
                   <h:outputText value="#{car.quantidadeItem}" /> 
                </h:column>  
                <h:column>
               <h:commandLink action= "#{carrinhoBean.remove(car)}"
				 onclick="if (!confirm('Confirma a exclusão  ?')) return false;">
					<h:graphicImage library="imagens" name="apagar.png" style="border:0" />
				</h:commandLink>
                </h:column>
            </h:dataTable> 
            </h:panelGrid>
            </fieldset>
             <br/>
             <br/>
             <h:commandButton action="#{carrinhoBean.finalizar}" value="Finalizar" /> 
             <h:commandButton action="#{requisicaoBean.salvar}" value="salvar" /> 
             <br/>
             <br/>
        </h:form>  
    </ui:define>  
</ui:composition>  
</html>

E a classe q add, remove e lista

@ManagedBean(name="carrinhoBean")
@SessionScoped

public class CarrinhoBean {
	
	
	private Produto produto = new Produto();
	ItemBean itemBean = new ItemBean();	
	
	private String car;

	
	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;
	}


}

Qnd eu tento adicionar no arrayList (lista) aparece o seguinte erro:

Erro de conversão ao definir o valor ‘requisicao.item.Item@7526ca33’ para ‘null Converter’.

Eu to listando so o nome no selectOneMenu -> itemLabel="#{itens.nome}" ! E desse jeito mesmo q eu quero…

O q fazer com esse erro ?

Rodrigo_Sasaki

Ah sim, no caso você teria que implementar um Converter para sua entidade. Já fez isso antes?

Aqui tem algumas dicas: http://www.rponte.com.br/tag/entity-converter/

tiago_

Rodrigo Sasaki:
Ah sim, no caso você teria que implementar um Converter para sua entidade. Já fez isso antes?

Aqui tem algumas dicas: http://www.rponte.com.br/tag/entity-converter/

Nunca fiz isso antes !

To dando uma olhada no converter… To vendo aqui como implementar p o meu caso :slight_smile:

Qualquer problema eu posto aqui, de qualquer forma, muito obrigado :slight_smile:

tiago_

Entao, tentei implementar e ocorreu um erro… To fazendo algo errado…

requisicao.item.Item cannot be cast to requisicao.util.BaseEntity

java.lang.ClassCastException: requisicao.item.Item cannot be cast to requisicao.util.BaseEntity

at requisicao.item.ItemConverter.getAsString(ItemConverter.java:34)

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)
public class Produto implements BaseEntity,  Serializable{

	private static final long serialVersionUID = -2477528265610024554L;
	
	private Integer codigo;  
	public Item objetoItem;	
	public int quantidadeItem;

	
        public Long getId() {  
            return new Long(codigo);  
    }

//get e set
//hashCode() e equals
package requisicao.util;

public interface BaseEntity {
	
	 public Long getId();  


}
private Produto produto = new Produto();
	ItemBean itemBean = new ItemBean();	
	
	private String car;
	private Produto selectedProduto;
	
	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 void setSelectedProduto(Produto selectedProduto) {  
        this.selectedProduto = selectedProduto;  
        System.out.println("Empresa selecionada: " + selectedProduto.getObjetoItem().getNome());  
    }  


    
    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 class ItemConverter implements Converter {

	
	   public Object getAsObject(FacesContext ctx, UIComponent component, String value) {  
        if (value != null) {  
            return this.getAttributesFrom(component).get(value);  
        }  
        return null;  
    }  
  
    public String getAsString(FacesContext ctx, UIComponent component, Object value) {  
  
        if (value != null  
                && !"".equals(value)) {  
  
            BaseEntity entity = (BaseEntity) value;  
  
            // adiciona item como atributo do componente  
            this.addAttribute(component, entity);  
  
            Long codigo = entity.getId();  
            if (codigo != null) {  
                return String.valueOf(codigo);  
            }  
        }  
  
        return (String) value;  
    }  
  
    protected void addAttribute(UIComponent component, BaseEntity o) {  
        String key = o.getId().toString(); // codigo da empresa como chave neste caso  
        this.getAttributesFrom(component).put(key, o);  
    }  
  
    protected Map<String, Object> getAttributesFrom(UIComponent component) {  
        return component.getAttributes();  
    }  
  
}
...
<fieldset><legend>Requisição</legend>
				<h:panelGrid columns="3">
				<h:outputText value="Item:"/>  
        		<h:selectOneMenu id="itemSelecionado" value="#{carrinhoBean.produto.objetoItem}" converter="itemConverter">
 				<f:selectItem itemLabel="Selecione" itemValue=""/>  
 				<f:selectItems 
 					value="#{itemBean.itens}"
 					var ="itens"
					itemValue="#{itens}"
					itemLabel="#{itens.nome}"/>
				</h:selectOneMenu>	

...
Rodrigo_Sasaki

Você tem que dar uma olhada no seu getAsString onde você faz o cast, que tipo de objeto está ali nessa hora?

tiago_

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

E

Amigo faz assim:

cria essa classe aki o :

EntityConverter.java
import java.lang.reflect.Field;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.persistence.Id;

@FacesConverter(value="entityConverter")
public class EntityConverter implements Converter {

	@Override
	public Object getAsObject(FacesContext ctx, UIComponent component,
			String value) {
		if (value != null) {
			return component.getAttributes().get(value);
		}
		return null;
	}

	@Override
	public String getAsString(FacesContext ctx, UIComponent component,
			Object obj) {
		if (obj != null && !"".equals(obj)) {
			String id;
			try {
				id = this.getId(getClazz(ctx, component), obj);
				if (id == null) {
					id = "";
				}
				id = id.trim();
				component.getAttributes().put(id,
						getClazz(ctx, component).cast(obj));
				return id;
			} catch (SecurityException e) {
				e.printStackTrace();
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (NoSuchFieldException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (ClassCastException e) {
				e.printStackTrace();
			}
		}
		return null;
	}

	private Class<?> getClazz(FacesContext facesContext, UIComponent component) {
		return component.getValueExpression("value").getType(
				facesContext.getELContext());
	}

	public String getId(Class<?> clazz, Object obj) throws SecurityException,
			NoSuchFieldException, IllegalArgumentException,
			IllegalAccessException {
		for (Field field : clazz.getDeclaredFields()) {
			if ((field.getAnnotation(Id.class)) != null) {
				Field privateField = clazz.getDeclaredField(field.getName());
				privateField.setAccessible(true);
				if (privateField.get(clazz.cast(obj)) != null) {
					return (String) field.getType()
							.cast(privateField.get(clazz.cast(obj))).toString();
				} else {
					return null;
				}
			}
		}
		return null;
	}
}

e um converter generico, serve para varios objetos.

depois la no selectOneMenu você chama ele atraves do converter="entityConverter"

<p:selectOneMenu id="empresaOneMenu" value="#{omissaoBean.empresa}"
					required="true" converter="entityConverter"
					requiredMessage="Selecione uma Empresa.">
					<f:selectItem itemLabel="Selecione" noSelectionOption="false" />
					<f:selectItems value="#{omissaoBean.listaEmpresa}" var="empresa"
						itemLabel="#{empresa.nome_empresa}" itemValue="#{empresa}" />
					<p:ajax event="change" listener="#{omissaoBean.preencheOneMenu}"
						update=":cadastroOmissao:linhaOneMenu,oneMenuVeiculo" />
				</p:selectOneMenu>
tiago_
eduardimaa:
Amigo faz assim:

cria essa classe aki o :

EntityConverter.java
import java.lang.reflect.Field;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.persistence.Id;

@FacesConverter(value="entityConverter")
public class EntityConverter implements Converter {

	@Override
	public Object getAsObject(FacesContext ctx, UIComponent component,
			String value) {
		if (value != null) {
			return component.getAttributes().get(value);
		}
		return null;
	}

	@Override
	public String getAsString(FacesContext ctx, UIComponent component,
			Object obj) {
		if (obj != null && !"".equals(obj)) {
			String id;
			try {
				id = this.getId(getClazz(ctx, component), obj);
				if (id == null) {
					id = "";
				}
				id = id.trim();
				component.getAttributes().put(id,
						getClazz(ctx, component).cast(obj));
				return id;
			} catch (SecurityException e) {
				e.printStackTrace();
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (NoSuchFieldException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (ClassCastException e) {
				e.printStackTrace();
			}
		}
		return null;
	}

	private Class<?> getClazz(FacesContext facesContext, UIComponent component) {
		return component.getValueExpression("value").getType(
				facesContext.getELContext());
	}

	public String getId(Class<?> clazz, Object obj) throws SecurityException,
			NoSuchFieldException, IllegalArgumentException,
			IllegalAccessException {
		for (Field field : clazz.getDeclaredFields()) {
			if ((field.getAnnotation(Id.class)) != null) {
				Field privateField = clazz.getDeclaredField(field.getName());
				privateField.setAccessible(true);
				if (privateField.get(clazz.cast(obj)) != null) {
					return (String) field.getType()
							.cast(privateField.get(clazz.cast(obj))).toString();
				} else {
					return null;
				}
			}
		}
		return null;
	}
}

e um converter generico, serve para varios objetos.

depois la no selectOneMenu você chama ele atraves do converter="entityConverter"

<p:selectOneMenu id="empresaOneMenu" value="#{omissaoBean.empresa}"
					required="true" converter="entityConverter"
					requiredMessage="Selecione uma Empresa.">
					<f:selectItem itemLabel="Selecione" noSelectionOption="false" />
					<f:selectItems value="#{omissaoBean.listaEmpresa}" var="empresa"
						itemLabel="#{empresa.nome_empresa}" itemValue="#{empresa}" />
					<p:ajax event="change" listener="#{omissaoBean.preencheOneMenu}"
						update=":cadastroOmissao:linhaOneMenu,oneMenuVeiculo" />
				</p:selectOneMenu>

Entao, utilizei esse converter ele ta funcionando parcialmente... so q o nome do item ta aparecendo desse jeito:

requisicao.item.Item@7526ca33

Na verdade, eh o objeto item ai... Teria q mostrar o nome do item... Tenho q fazer alguma modificacao no converter...

@FacesConverter(value = "itemConverter")

public class ItemConverter implements Converter {

	 @Override  
	    public Object getAsObject(FacesContext ctx, UIComponent component,  
	            String value) {  
	        if (value != null) {  
	            return component.getAttributes().get(value);  
	        }  
	        return null;  
	    }  
	  
	    @Override  
	    public String getAsString(FacesContext ctx, UIComponent component,  
	            Object obj) {  
	        if (obj != null && !"".equals(obj)) {  
	            String id;  
	            try {  
	                id = this.getId(getClazz(ctx, component), obj);  
	                if (id == null) {  
	                    id = "";  
	                }  
	                id = id.trim();  
	                component.getAttributes().put(id,  
	                        getClazz(ctx, component).cast(obj));  
	                return id;  
	            } catch (SecurityException e) {  
	                e.printStackTrace();  
	            } catch (IllegalArgumentException e) {  
	                e.printStackTrace();  
	            } catch (NoSuchFieldException e) {  
	                e.printStackTrace();  
	            } catch (IllegalAccessException e) {  
	                e.printStackTrace();  
	            } catch (ClassCastException e) {  
	                e.printStackTrace();  
	            }  
	        }  
	        return null;  
	    }  
	  
	    private Class<?> getClazz(FacesContext facesContext, UIComponent component) {  
	        return component.getValueExpression("value").getType(  
	                facesContext.getELContext());  
	    }  
	  
	    public String getId(Class<?> clazz, Object obj) throws SecurityException,  
	            NoSuchFieldException, IllegalArgumentException,  
	            IllegalAccessException {  
	        for (Field field : clazz.getDeclaredFields()) {  
	            if ((field.getAnnotation(Id.class)) != null) {  
	                Field privateField = clazz.getDeclaredField(field.getName());  
	                privateField.setAccessible(true);  
	                if (privateField.get(clazz.cast(obj)) != null) {  
	                    return (String) field.getType()  
	                            .cast(privateField.get(clazz.cast(obj))).toString();  
	                } else {  
	                    return null;  
	                }  
	            }  
	        }  
	        return null;  
	    }  
	}
<br/>	
				<fieldset><legend>Requisição</legend>
				<h:panelGrid columns="3">
				<h:outputText value="Item:"/>  
        		<h:selectOneMenu id="itemSelecionado" value="#{carrinhoBean.produto.objetoItem}" converter="itemConverter" items="#{itemBean.itens}">
 				<f:selectItem itemLabel="Selecione" itemValue=""/>  
 				<f:selectItems 
 					value="#{itemBean.itens}"
 					var ="itens"
					itemValue="#{itens}"
					itemLabel="#{itens.nome}"/>
				</h:selectOneMenu>
tiago_
tiago__:
eduardimaa:
Amigo faz assim:

cria essa classe aki o :

EntityConverter.java
import java.lang.reflect.Field;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.persistence.Id;

@FacesConverter(value="entityConverter")
public class EntityConverter implements Converter {

	@Override
	public Object getAsObject(FacesContext ctx, UIComponent component,
			String value) {
		if (value != null) {
			return component.getAttributes().get(value);
		}
		return null;
	}

	@Override
	public String getAsString(FacesContext ctx, UIComponent component,
			Object obj) {
		if (obj != null && !"".equals(obj)) {
			String id;
			try {
				id = this.getId(getClazz(ctx, component), obj);
				if (id == null) {
					id = "";
				}
				id = id.trim();
				component.getAttributes().put(id,
						getClazz(ctx, component).cast(obj));
				return id;
			} catch (SecurityException e) {
				e.printStackTrace();
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (NoSuchFieldException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (ClassCastException e) {
				e.printStackTrace();
			}
		}
		return null;
	}

	private Class<?> getClazz(FacesContext facesContext, UIComponent component) {
		return component.getValueExpression("value").getType(
				facesContext.getELContext());
	}

	public String getId(Class<?> clazz, Object obj) throws SecurityException,
			NoSuchFieldException, IllegalArgumentException,
			IllegalAccessException {
		for (Field field : clazz.getDeclaredFields()) {
			if ((field.getAnnotation(Id.class)) != null) {
				Field privateField = clazz.getDeclaredField(field.getName());
				privateField.setAccessible(true);
				if (privateField.get(clazz.cast(obj)) != null) {
					return (String) field.getType()
							.cast(privateField.get(clazz.cast(obj))).toString();
				} else {
					return null;
				}
			}
		}
		return null;
	}
}

e um converter generico, serve para varios objetos.

depois la no selectOneMenu você chama ele atraves do converter="entityConverter"

<p:selectOneMenu id="empresaOneMenu" value="#{omissaoBean.empresa}"
					required="true" converter="entityConverter"
					requiredMessage="Selecione uma Empresa.">
					<f:selectItem itemLabel="Selecione" noSelectionOption="false" />
					<f:selectItems value="#{omissaoBean.listaEmpresa}" var="empresa"
						itemLabel="#{empresa.nome_empresa}" itemValue="#{empresa}" />
					<p:ajax event="change" listener="#{omissaoBean.preencheOneMenu}"
						update=":cadastroOmissao:linhaOneMenu,oneMenuVeiculo" />
				</p:selectOneMenu>

Entao, utilizei esse converter ele ta funcionando parcialmente... so q o nome do item ta aparecendo desse jeito:

requisicao.item.Item@7526ca33

Na verdade, eh o objeto item ai... Teria q mostrar o nome do item... Tenho q fazer alguma modificacao no converter...

@FacesConverter(value = "itemConverter")

public class ItemConverter implements Converter {

	 @Override  
	    public Object getAsObject(FacesContext ctx, UIComponent component,  
	            String value) {  
	        if (value != null) {  
	            return component.getAttributes().get(value);  
	        }  
	        return null;  
	    }  
	  
	    @Override  
	    public String getAsString(FacesContext ctx, UIComponent component,  
	            Object obj) {  
	        if (obj != null && !"".equals(obj)) {  
	            String id;  
	            try {  
	                id = this.getId(getClazz(ctx, component), obj);  
	                if (id == null) {  
	                    id = "";  
	                }  
	                id = id.trim();  
	                component.getAttributes().put(id,  
	                        getClazz(ctx, component).cast(obj));  
	                return id;  
	            } catch (SecurityException e) {  
	                e.printStackTrace();  
	            } catch (IllegalArgumentException e) {  
	                e.printStackTrace();  
	            } catch (NoSuchFieldException e) {  
	                e.printStackTrace();  
	            } catch (IllegalAccessException e) {  
	                e.printStackTrace();  
	            } catch (ClassCastException e) {  
	                e.printStackTrace();  
	            }  
	        }  
	        return null;  
	    }  
	  
	    private Class<?> getClazz(FacesContext facesContext, UIComponent component) {  
	        return component.getValueExpression("value").getType(  
	                facesContext.getELContext());  
	    }  
	  
	    public String getId(Class<?> clazz, Object obj) throws SecurityException,  
	            NoSuchFieldException, IllegalArgumentException,  
	            IllegalAccessException {  
	        for (Field field : clazz.getDeclaredFields()) {  
	            if ((field.getAnnotation(Id.class)) != null) {  
	                Field privateField = clazz.getDeclaredField(field.getName());  
	                privateField.setAccessible(true);  
	                if (privateField.get(clazz.cast(obj)) != null) {  
	                    return (String) field.getType()  
	                            .cast(privateField.get(clazz.cast(obj))).toString();  
	                } else {  
	                    return null;  
	                }  
	            }  
	        }  
	        return null;  
	    }  
	}
<br/>	
				<fieldset><legend>Requisição</legend>
				<h:panelGrid columns="3">
				<h:outputText value="Item:"/>  
        		<h:selectOneMenu id="itemSelecionado" value="#{carrinhoBean.produto.objetoItem}" converter="itemConverter" items="#{itemBean.itens}">
 				<f:selectItem itemLabel="Selecione" itemValue=""/>  
 				<f:selectItems 
 					value="#{itemBean.itens}"
 					var ="itens"
					itemValue="#{itens}"
					itemLabel="#{itens.nome}"/>
				</h:selectOneMenu>

Resolvido...

So foi adicionar .nome no atributo objetoItem... Muito obrigado a todos pela ajuda.

<f:facet name="header">Nome do Item</f:facet>  
                  <h:outputText value="#{car.objetoItem.nome}" />
Criado 11 de abril de 2013
Ultima resposta 16 de abr. de 2013
Respostas 12
Participantes 3