DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine
ou 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.

[fechar]

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.

Listar todos os posts de Introdução a JavaServer Faces

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.
O que você achou deste post?

    7 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Juscelino Gongora
Dyego,
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
[há +1 ano] - Responder

 

Werner De Paiva Marques.
Boa noite, Dyego. Mais uma vez venho pedir ajuda para resolver o problema desse erro na classe addSales.jsp no momento que clico no botao OK.
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;
}
[há +1 mês] - Responder

 

Diogo Souza
Olá, isso tá com cara de que você está usando um <h:selectOneMenu /> com <f:selectItems />, se tiver, você precisa criar um converter corretamente, e referenciar o mesmo no atributo "converter" do próprio select!! Verifica isso blz! :)
[há +1 mês] - Responder
 

Werner De Paiva Marques.
Diogo, amigo gentileza me ajude porque antes de enviar os fontes abaixo, revisei o codigo
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>
[há +1 mês] - Responder
 

Diogo Souza
Oi, não sei como está o seu "LoginConverter" mas vi que você está criando os selectItems passando o objeto como primeiro parâmetro e a string de username, como segundo...

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...
[há +1 mês] - Responder
 

Werner De Paiva Marques.
Ai esta meu loginconverter. Antecipadamente obrigado, estou ansioso para continuar o curso.


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

}
[há +1 mês] - Responder
 

Diogo Souza
Olá Werner, teu problema tá estranho, vamos por eliminação ok?

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!
[há +1 mês] - Responder
 
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03