Converter PrimeFaces p:selectOneMenu

0 respostas
Avelino7
Estou tentando usar o p:selectOneMenu ou o autoComplete com POJO, mas ele não esta encontrando o converter; Aparece o seguinte erro: [color=red]Erro de expressão: Objeto denominado: livro não encontrado.[/color] Segue códigos: vendas.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core">
    <ui:decorate template="template.xhtml">  
        <ui:define name="centro"> 
            <h:form prependId="false">

                <p:panel> 
                    <h:panelGrid columns="5"> 
                        <p:commandButton value="Nova Venda" actionListener="#{vendaController.prepararAdicionarVenda}" icon="ui-icon-plusthick" update="@([id$=infosVenda])" oncomplete="dialogGerVenda.show()"/>
                        <h:commandLink>  
                            <p:graphicImage value="/images/excel.png" />  
                            <p:dataExporter type="xls" target="tabela" fileName="listarVendas" />  
                        </h:commandLink>  

                        <h:commandLink>  
                            <p:graphicImage value="/images/pdf.png" />  
                            <p:dataExporter type="pdf" target="tabela" fileName="listarVendas"/>  
                        </h:commandLink>  

                        <h:commandLink>  
                            <p:graphicImage value="/images/csv.png" />  
                            <p:dataExporter type="csv" target="tabela" fileName="listarVendas" />  
                        </h:commandLink>  

                        <h:commandLink>  
                            <p:graphicImage value="/images/xml.png" />  
                            <p:dataExporter type="xml" target="tabela" fileName="listarVendas" />  
                        </h:commandLink>  
                    </h:panelGrid>
                </p:panel>  

                <p:dataTable id="tabela" var="venda" value="#{vendaController.listarVendas}" paginator="true" rows="6" rowsPerPageTemplate="6,15,30,50,100">  
                    <f:facet name="header">Lista de Vendas</f:facet>  
                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="Data Venda"/>
                        </f:facet>
                        <h:outputText value="#{venda.dataVenda}"> <f:convertDateTime pattern="dd/MM/yyyy"/>  </h:outputText>
                    </p:column>
                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="Total"/>
                        </f:facet>
                        <h:outputText value="#{venda.totalVenda}"/>
                    </p:column>
                    <p:column style="text-align: center">
                        <f:facet name="header">
                            <h:outputText value="Alterar"/>
                        </f:facet>
                        <p:commandButton actionListener="#{vendaController.prepararAlterarVenda}" icon="ui-icon-pencil" update="@([id$=infosVenda])" oncomplete="dialogGerVenda.show()"/>
                    </p:column>
                    <p:column style="text-align: center">
                        <f:facet name="header">
                            <h:outputText value="Excluir"/>
                        </f:facet>
                        <p:commandButton update="@([id$=tabela]);@([id$=growl])" actionListener="#{vendaController.excluirVenda}" icon="ui-icon-trash" />
                    </p:column>
                </p:dataTable>  
            </h:form>

            <p:dialog appendToBody="true" header="Gerencia de Venda" widgetVar="dialogGerVenda"  resizable="false" modal="true" showEffect="explode" width="500">
                <h:form prependId="false">


                    <p:panelGrid id="infosVenda" columns="2" style="margin-bottom:10px">

                        <p:outputLabel for="dataVenda" value="Data Venda:" />
                        <p:calendar required="true" id="dataVenda" value="#{vendaController.venda.dataVenda}" pattern="dd/MM/yyyy"/>

                        <p:outputLabel for="totalVenda" value="Total Venda:" />
                        <p:spinner required="true" id="totalVenda" value="#{vendaController.venda.totalVenda}" />

                        <h:outputText value="Livro: " />  
                        <p:selectOneMenu value="#{vendaController.livro}" effect="fade" converter="livro">  
                            <f:selectItem itemLabel="Selecione" itemValue="" />  
                            <f:selectItems value="#{livroController.listarLivros}" var="livro" itemLabel="#{livro.titulo}" itemValue="#{livro}"/>  
                        </p:selectOneMenu>  

                        <p:commandButton update="@([id$=tabela]);@([id$=growl])" actionListener="#{vendaController.salvarVenda}" icon="ui-icon-check" value="Salvar Venda" oncomplete="dialogGerVenda.show()"/>
                    </p:panelGrid>
                </h:form>
            </p:dialog>
        </ui:define>  
    </ui:decorate>  
</html>
VendaController.java
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controller;

import Dao.LivroDAOImp;
import Dao.VendaDAO;
import Dao.VendaDAOImp;
import Model.Livro;
import Model.Venda;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.primefaces.event.UnselectEvent;

@ManagedBean
@SessionScoped
public class VendaController {

    private Venda venda = new Venda();
    private DataModel listaVendas;
    private Livro livro;

    public DataModel getListarVendas() {
        List<Venda> lista = new VendaDAOImp().list();
        listaVendas = new ListDataModel(lista);
        return listaVendas;
    }

    public Livro getLivro() {
        return livro;
    }

    public void setLivro(Livro livro) {
        this.livro = livro;
    }


    public Venda getVenda() {
        return venda;
    }

    public void setVenda(Venda venda) {
        this.venda = venda;
    }

    public void prepararAdicionarVenda(ActionEvent actionEvent) {
        venda = new Venda();
    }

    public void prepararAlterarVenda(ActionEvent actionEvent) {
        venda = (Venda) (listaVendas.getRowData());
    }

    public String excluirVenda() {

        Venda vendaTemp = (Venda) (listaVendas.getRowData());
        VendaDAO dao = new VendaDAOImp();
        dao.remove(vendaTemp);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Excluído, ", "Venda excluído com sucesso!"));
        return "index";

    }

    public void salvarVenda(ActionEvent actionEvent) {
        VendaDAO dao = new VendaDAOImp();
        dao.save(venda);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Salvo, ", "Venda salvo com sucesso!"));
    }
}
LivroConverter.java
package Converter;

  
import Controller.LivroController;
import Model.Livro;
import java.util.ArrayList;  
import java.util.List;  
import javax.faces.application.FacesMessage;  
  
import javax.faces.component.UIComponent;  
import javax.faces.context.FacesContext;  
import javax.faces.convert.Converter;  
import javax.faces.convert.ConverterException;  
  
public class LivroConverter implements Converter {  
  
    public static List<Livro> livroDB= (List<Livro>) new LivroController().getListarLivros();  
  
  
    public Object getAsObject(FacesContext facesContext, UIComponent component, String submittedValue) {  
        if (submittedValue.trim().equals("")) {  
            return null;  
        } else {  
            try {  
                String titulo= submittedValue;  
  
                for (Livro l : livroDB) {  
                    if (l.getTitulo().equals(titulo)) {  
                        return l;  
                    }  
                }  
  
            } catch(NumberFormatException exception) {  
                throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid livro"));  
            }  
        }  
  
        return null;  
    }  
  
    public String getAsString(FacesContext facesContext, UIComponent component, Object value) {  
        if (value == null || value.equals("")) {  
            return "";  
        } else {  
            return String.valueOf(((Livro) value).getTitulo());  
        }  
    }  
}

Aguardo..... =/ preciso com urgencia

Criado 16 de junho de 2013
Respostas 0
Participantes 1