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
[code]<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>[/code]
VendaController.java
[code]/*
- 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!"));
}
}
[/code]
LivroConverter.java
[code]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());
}
}
}
[/code]
Aguardo… =/ preciso com urgencia