Este é um post disponível para assinantes MVPou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Video: Criando uma Aplicação Completa com JavaServer Faces - Aula 8 - Construindo páginas JSF
Nesta vídeo-aula realizamos a edição de nossos produtos bem como terminamos de colocar a parte de "produtos" funcionando por completo.
Você não gostou da qualidade deste conteúdo?
(opcional) Você gostaria de comentar o que não lhe agradou?
Título:
Tempo: 00:14:10
Mini-Resumo: Continuamos a criação de nossas paginas JSF, nesta aula realizamos a edição de nossos produtos bem como terminamos de colocar a parte de "produtos" funcionando por completo, e partimos para a criação das paginas de vendas e também a adição da mesma.
Metodologia de desenvolvimento da aplicação do exemplo:
A especificação JSF descreve toda uma metodologia de trabalho a ser empregada no desenvolvimento WEB, desde a concepção do aplicativo até a sua manutenção futura.
Este curso foca os fundamentos, os principios e o funcionamento desta tecnologia. A segunda parte do curso desenvolve uma aplicação completa utilizando JSF.
O curso leva em consideração os padrões consagrados pelo mercado, tais como o conceito MVC e o conceito de DAO's - realidade encontrada na maioria das empresas.
Tecnologias Utilizadas: Java SE 6, NetBeans 6.1, Tomcat6 , JavaServer Faces 1.2
Exemplos construídos: Construímos a edição dos produtos e também a adição de vendas , listagem de vendas e a ligação delas com seus backing beans.
Palavras chaves: netbeans 6.1, tomcat, introdução, java, web, jsf, faces, mvc, aplicação completa, segurança.
Dyego Souza Do Carmo
Engenheiro da Computação e evangelista da tecnologia Java , a mais de 16 anos especialista no sistema operacional linux. Atuando como Gerente de Desenvolvimento, Arquiteto Java a 10 anos sendo especialista em desenvolvimento de aplicações Java EE utilizando objetos distribuidos e Swing.
7 COMENTÁRIOS
Parabéns pelas vídeos aulas, são exatamente o que procurava, algo direto sem rodeios.
Mas estou com uma dificuldade, todo sistema está rodando com um detalhe ao clicar no botão para adicionar uma venda está aparecendo a seguinte mensagem:
an error occurred when processing your submitted information
Revisei todo projeto e ele está exatamente como o seu, sem nenhuma diferença, o que ocorre? Você pode me ajudar?
Obrigado,
Juscelino
Erro de conversão ao definir o valor '' para 'null Converter'.
Nao sei se o erro acontece no ProducConverter ou LoginConverter
Ja registrei no codigo fonte de faces-config.xml
<converter>
<converter-id>ProductConverter</converter-id>
<converter-class>myfirstapp.converter.ProductConverter</converter-class>
</converter>
<converter>
<converter-id>LoginConverter</converter-id>
<converter-class>myfirstapp.converter.LoginConverter</converter-class>
</converter>
Ja comparei as classes ProductConverte e LoginConverter, como tambem Login.java e Product.java, LoginDAO e ProductDAO em busca de algo, mas não encontrei, inclusive os metodos equals e hascode estao sobrescritos em Login.java e Product.java
@Override
public String toString() {
return String.valueOf(code);
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Login other = (Login) obj;
if (this.code != other.code) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 7;
hash = 29 * hash + this.code;
return hash;
}
varias vezes, comparei meu codigo com o codigo das video-aula do Dyego, varias vezes.
Veja os fontes abaixo
ADDSALES
========
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Nova Venda</title>
</head>
<body>
<f:view>
<h:messages/>
<h:form>
<h1>Acrescentando Nova Venda</h1>
<br>
<br>
Codigo <h:inputText value="#{salesFaces.selectedSale.code}"/>
<br>
Produto <h:selectOneMenu value="#{salesFaces.selectedSale.product}">
<f:selectItems value="#{salesFaces.products}"/>
<f:converter converterId="ProductConverter"/>
</h:selectOneMenu>
<br>
Endereço <h:inputText value="#{salesFaces.selectedSale.address}"/>
<br>
Vendedor <h:selectOneMenu value="#{salesFaces.selectedSale.vendor}">
<f:selectItems value="#{salesFaces.vendors}"/>
<f:converter converterId="LoginConverter"/>
</h:selectOneMenu>
<br>
Data <h:inputText value="#{salesFaces.selectedSale.date}"/>
<br>
<br>
<br>
<h:commandButton action="#{salesFaces.finishStartSales}" value="OK"/>
<h:commandButton action="gotoListSales" value="Cancela"/>
<br>
<br>
</h:form>
</f:view>
</body>
</html>
PRODUCTCONVERTER
================
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package myfirstapp.converter;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import myfirstjsfapp.Product;
import myfirstjsfapp.dao.ProductDAO;
/**
*
* @author Werner
*/
public class ProductConverter implements Converter {
public static final long serialVersiionUID = 1L;
private ProductDAO prodDAO = new ProductDAO();
public ProductConverter() {
}
public Object getAsObject(FacesContext arg0, UIComponent arq1, String arg2) {
Integer code = Integer.parseInt(arg2);
try {
return prodDAO.getById(code);
} catch (ClassNotFoundException ex) {
Logger.getLogger(ProductConverter.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(ProductConverter.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
Product prod = (Product) arg2;
return String.valueOf(prod.getCode());
}
}
SALESFACES
==========
package myfirstapp.managedbeans;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import javax.faces.model.SelectItem;
import myfirstjsfapp.Login;
import myfirstjsfapp.Product;
import myfirstjsfapp.Sales;
import myfirstjsfapp.dao.LoginDAO;
import myfirstjsfapp.dao.ProductDAO;
import myfirstjsfapp.dao.SalesDAO;
/**
*
* @author Werner
*/
public class SalesFaces implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private ProductDAO prodDAO = new ProductDAO();
private LoginDAO loginDAO = new LoginDAO();
private SalesDAO salesDAO = new SalesDAO();
private Sales selectedSale;
private List<Sales> sales;
public SalesFaces() {
}
public String addStartSales() {
selectedSale = new Sales();
return "gotoAddNewSale";
}
public SalesDAO getSalesDAO() {
return salesDAO;
}
public void setSalesDAO(SalesDAO salesDAO) {
this.salesDAO = salesDAO;
}
public Sales getSelectedSale() {
return selectedSale;
}
public void setSelectedSale(Sales selectedSale) {
this.selectedSale = selectedSale;
}
public String finishStartSales() throws ClassNotFoundException, SQLException {
salesDAO.add(selectedSale);
// clean cache
sales = null;
return "gotoListSales";
}
public String deleteSales() throws ClassNotFoundException, SQLException {
salesDAO.delete(selectedSale);
// cleaan cache
sales = null;
return "gotoListSales";
}
public String viewSelectSale() {
return "gotoViewSelectSales";
}
public List<SelectItem> getProducts() throws ClassNotFoundException, SQLException {
List<SelectItem> toReturn = new LinkedList<SelectItem>();
for (Product prod : prodDAO.getAllProducts()) {
toReturn.add(new SelectItem(prod,prod.getName()));
}
return toReturn;
}
public List<SelectItem> getVendors() throws ClassNotFoundException, SQLException {
List<SelectItem> toReturn = new LinkedList<SelectItem>();
for (Login login : loginDAO.getUsers()) {
toReturn.add(new SelectItem(login,login.getUsername()));
}
return toReturn;
}
public List<Sales> getSales() throws ClassNotFoundException, SQLException {
if (sales == null) {
sales = salesDAO.getSales();
}
return sales;
}
public LoginDAO getLoginDAO() {
return loginDAO;
}
public void setLoginDAO(LoginDAO loginDAO) {
this.loginDAO = loginDAO;
}
public ProductDAO getProdDAO() {
return prodDAO;
}
public void setProdDAO(ProductDAO prodDAO) {
this.prodDAO = prodDAO;
}
}
PRODUCT.JAVA
============
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package myfirstjsfapp;
/**
*
* @author Werner
*/
public class Product implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private int code;
private String name;
private int numberofitens;
private Double price;
public Product() {
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNumberofitens() {
return numberofitens;
}
public void setNumberofitens(int numberofitens) {
this.numberofitens = numberofitens;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
@Override
public String toString() {
return String.valueOf(code);
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Product other = (Product) obj;
if (this.code != other.code) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 3;
hash = 23 * hash + this.code;
return hash;
}
}
FACES-CONFIG.XML
================
<?xml version='1.0' encoding='UTF-8'?>
<!-- =========== FULL CONFIGURATION FILE ================================== -->
<faces-config version="2.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<managed-bean>
<managed-bean-name>productFace</managed-bean-name>
<managed-bean-class>myfirstapp.managedbeans.ProductFace</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope></managed-bean>
<managed-bean>
<managed-bean-name>salesFaces</managed-bean-name>
<managed-bean-class>myfirstapp.managedbeans.SalesFaces</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>loginFaces</managed-bean-name>
<managed-bean-class>myfirstapp.managedbeans.LoginFaces</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/welcomeJSF.jsp</from-view-id>
<navigation-case>
<from-outcome>gotoListProducts</from-outcome>
<to-view-id>/products.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>gotoListSales</from-outcome>
<to-view-id>/sales.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/products.jsp</from-view-id>
<navigation-case>
<from-outcome>gotoListProducts</from-outcome>
<to-view-id>/products.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>gotoAddNewProduct</from-outcome>
<to-view-id>/addProduct.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>gotoEditProduct</from-outcome>
<to-view-id>/editProduct.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>gotoMain</from-outcome>
<to-view-id>/welcomeJSF.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/addProduct.jsp</from-view-id>
<navigation-case>
<from-outcome>gotoListProduct</from-outcome>
<to-view-id>/products.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/editProduct.jsp</from-view-id>
<navigation-case>
<from-outcome>gotoListProduct</from-outcome>
<to-view-id>/products.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/sales.jsp</from-view-id>
<navigation-case>
<from-outcome>gotoMain</from-outcome>
<to-view-id>/welcomeJSF.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>gotoListSales</from-outcome>
<to-view-id>/sales.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>gotoAddNewSale</from-outcome>
<to-view-id>/addSales.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>gotoViewSelectSales</from-outcome>
<to-view-id>/viewSale.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/addSales.jsp</from-view-id>
<navigation-case>
<from-outcome>gotoListSales</from-outcome>
<to-view-id>/sales.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/viewSale.jsp</from-view-id>
<navigation-case>
<from-outcome>gotoListSales</from-outcome>
<to-view-id>/sales.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<converter>
<converter-id>ProductConverter</converter-id>
<converter-class>myfirstapp.converter.ProductConverter</converter-class>
</converter>
<converter>
<converter-id>LoginConverter</converter-id>
<converter-class>myfirstapp.converter.LoginConverter</converter-class>
</converter>
</faces-config>
Depois no converter, você vai lá e converter o que seria uma String para um inteiro:
public Object getAsObject(FacesContext arg0, UIComponent arq1, String arg2) {
Integer code = Integer.parseInt(arg2);
try {
return prodDAO.getById(code);
// ...
Coloca um degub nesse ponto do código e testa...
package myfirstapp.converter;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import myfirstjsfapp.Login;
import myfirstjsfapp.dao.LoginDAO;
/**
*
* @author Werner
*/
public class LoginConverter implements Converter {
public static final long serialVersiionUID = 1L;
private LoginDAO loginDAO = new LoginDAO();
public LoginConverter() {
}
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
Integer code = Integer.parseInt(arg2);
try {
return loginDAO.getById(code);
} catch (ClassNotFoundException ex) {
Logger.getLogger(LoginConverter.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(LoginConverter.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
Login login = (Login) arg2;
return String.valueOf(login.getCode());
}
}
Faz o seguinte, tira o converter de um dos select's e testa para ver se o erro persiste, depois faz isso com o outro, assim saberá em qual dos converter's o erro acontece... Se acontecer tanto com um quanto com outro, tira os dois e testa, ok?
Posta o resultado aqui!

download

