01-jsf

69
  Prof. Adilson Vahldick ([email protected]) JAVA WEB BÁSICO: JSF E JPA Parte 1 : JSF com PrimeFaces

Upload: adilson-vahldick

Post on 16-Jul-2015

43 views

Category:

Documents


0 download

TRANSCRIPT

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 1/69

 

Prof. Adilson Vahldick ([email protected])

JAVA WEB BÁSICO: JSF E JPAParte 1 : JSF com PrimeFaces

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 2/69

 

Prof. Adilson Vahldick ([email protected])

AGENDA

JSF O que é, Histórico, Características PrimeFaces

Configuração do Ambiente Formulários Tabelas

 

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 3/69

 

Prof. Adilson Vahldick ([email protected])

Java Server Faces (O que é?)

Um framework para integrar MVC comaplicações web

Facilita o desenvolvimento de interface comusuário

Fornece componentes visuais Tratamento de eventos Validação Internacionalização

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 4/69

 

Prof. Adilson Vahldick ([email protected])

JSF (Histórico)

1.0 e 1.1 – 2004 1.2 – 2006 (lançado com Java EE 5) 2.0 – 2009: Melhoria extrema quanto a

facilidade de utilização. Java EE 6. Facelets eanotações. Facelets: criação das páginas com XML

2.1 – 2010: Pequenas melhorias

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 5/69

 

Prof. Adilson Vahldick ([email protected])

JSF (Características)

JSF é uma especificação

Mojarra é a implementação de referência

MyFaces é uma alternativa (Apache)

RichFaces, Tobago, IceFaces, PrimeFaces,entre outros, são opções de componentes visuais

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 6/69

 

Prof. Adilson Vahldick ([email protected])

PrimeFaces

 www.primefaces.org www.primefaces.org/showcase-labs/ http://primefaces.googlecode.com/files/

primefaces_users_guide_2_2.pdf  Um único arquivo .jar  Sem configurações adicionais Mais de 100 componentes visuais Suporte nativo a AJAX Uma dezena de skins

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 7/69

 

Prof. Adilson Vahldick ([email protected])

PrimeFaces (configurando o ambiente)

Do meu site baixe os arquivos primefaces-xxx.jar  javax.faces.jar  black-tie-xxx.jar  pt_locale.js

Crie um novo projeto web No NetBeans

Arquivo > Novo Projeto > Java Web > Próximo Nome do Projeto: app1 Local do Projeto: a sua escolha > Próximo Selecione o Tomcat (ou vamos adicionar um) Finalizar 

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 8/69

 

Prof. Adilson Vahldick ([email protected])

PrimeFaces (configurando o ambiente)

Copie o arquivo pt_locale.js para ”páginas web” Botão direito no nome do projeto Selecione [Propriedades]

Bibliotecas > Adicionar JAR/pasta Selecione os três arquivos baixados [OK]

Abra o arquivo Páginas Web > WEB-INF > web.xml Clique na opção XML

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 9/69

 

Prof. Adilson Vahldick ([email protected])

PrimeFaces (configurando o ambiente)

 <web-app ....> <context-param> 

<param-name>primefaces.THEME</param-name> 

<param-value>black-tie</param-value> 

</context-param> 

<servlet> 

<servlet-name>Faces Servlet</servlet-name> 

<servlet-class> 

javax.faces.webapp.FacesServlet

</servlet-class> 

</servlet> 

<servlet-mapping> 

<servlet-name>Faces Servlet</servlet-name> 

<url-pattern>*.jsf</url-pattern> 

</servlet-mapping> 

<welcome-file-list> 

<welcome-file>index.jsp</welcome-file> 

</welcome-file-list> 

 </web-app> 

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 10/69

 

Prof. Adilson Vahldick ([email protected])

PrimeFaces

Arquivo > Novo Arquivo > Java Server Faces >Página JSF > Próximo

Nome de arquivo: index

Opções: Facelets > Finalizar 

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 11/69

 

Prof. Adilson Vahldick ([email protected])

PrimeFaces (index.xhtml)

 <?xml version='1.0' encoding='UTF-8' ?>  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

  <html xmlns="http://www.w3.org/1999/xhtml"

xmlns:h="http://java.sun.com/jsf/html"

  xmlns:p="http://primefaces.org/ui"> 

<h:head> 

<title>  Meu JSF </title> 

</h:head> 

<h:body> 

   <p:panel header="Primeiro"> 

Alô Mundo

</p:panel> 

</h:body> 

 </html> 

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 12/69

 

Prof. Adilson Vahldick ([email protected])

PrimeFaces (index.jsp)

<jsp:forward page="index.jsf"/> 

Pressione [F6] ou [Executar projeto principal]

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 13/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 14/69

 

Prof. Adilson Vahldick ([email protected])

JSF MVC (Model-View-Controller)

Cliente

CadastroCliente

View 

Controller 

Model 

@ManagedBean

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 15/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros: Telas

Nova página JSF > clientescad.xhtml

  <html xmlns="http://www.w3.org/1999/xhtml"

xmlns:h="http://java.sun.com/jsf/html"

  xmlns:p="http://primefaces.org/ui"

xmlns:f="http://java.sun.com/jsf/core" > 

<h:head> 

<title> Cadastro de Clientes </title> 

<script type="text/javascript" src="pt_locale.js"> 

</script> 

</h:head> 

<h:body> 

...

 </h:body> 

 </html> 

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 16/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros: Telas

 <html...

<h:body> 

<p:panel header="Cadastro de Clientes" style="width: 600px"> 

<h:form> 

<h:panelGrid columns="3" id="grid"> 

...</h:panelGrid> 

<hr/> 

...

</h:form> 

</p:panel> 

</h:body>  </html> 

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 17/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros: Telas

 <h:panelGrid columns="3"> 

 

 <h:outputText value="Nome :"/> 

<p:inputText id="nome" value="" required="true"/> 

<p:message for="nome"/> 

...

<h:outputText value="E-mail:"/> 

<p:inputText id="mail" value="" required="true" /> 

<p:message for="mail"/> 

 ...

 </h:panelGrid> 

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 18/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros: Telas

 <h:panelGrid columns="3"> 

 

 <h:outputText value="Sexo :"/> 

<p:selectOneRadio value=""> 

<f:selectItem itemLabel="Masculino" itemValue="true"/> 

<f:selectItem itemLabel="Feminino" itemValue="false"/> </p:selectOneRadio> 

<h:outputText/> 

...

 </h:panelGrid> 

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 19/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros: Telas

 <h:panelGrid columns="3"> 

 

 <h:outputText value="Nascimento:"/> 

<p:calendar id="nasc" locale="pt" pattern="dd/MM/yyyy"

 mode="popup" showOn="button" value=""/> 

<p:message for="mail"/> 

...

 </h:panelGrid> 

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 20/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros: Telas

 <h:panelGrid columns="3"> 

 

  <h:outputText value="Escolaridade:"/> 

<p:selectOneMenu value=""> 

<f:selectItem itemLabel="Fundamental" itemValue="1"/> 

<f:selectItem itemLabel="Médio" itemValue="2"/> <f:selectItem itemLabel="Superior" itemValue="3"/> 

</p:selectOneMenu> 

<h:outputText/> 

...

 </h:panelGrid> 

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 21/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros: Telas

...

 </h:panelGrid> 

 <hr/> 

 <p:outputPanel layout="block" style="margin: auto; width:40%"> <p:commandButton value="Salvar" update="grid"/> 

<p:commandButton value="Cancelar" ajax="false" immediate="true"/> 

 </p:outputPanel> 

...

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 22/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros

Testar : http://localhost:8080/app1/clientescad.jsf 

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 23/69

 

Prof. Adilson Vahldick ([email protected])

JSF MVC (Model-View-Controller)

Cliente

CadastroCliente

View 

Controller 

Model 

@ManagedBean

P

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 24/69

 

Prof. Adilson Vahldick ([email protected])

Cadastro: Modelo

 package modelo;

import java.util.Date;

 public class Cliente {

private long id;

private String nome;

private boolean sexoMasc;

private Date nascimento;

private String email;

private int escolaridade;

// métodos acessores (getters e setters)

 

}

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 25/69

 

Prof. Adilson Vahldick ([email protected])

JSF MVC (Model-View-Controller)

Cliente

CadastroCliente

View 

Controller 

Model 

@ManagedBean

PP

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 26/69

 

Prof. Adilson Vahldick ([email protected])

Cadastro: Controle

 package controle;

import javax.faces.bean.ManagedBean;import javax.faces.bean.SessionScoped;

import modelo.Cliente;

@ManagedBean(name="cadCliente")

@SessionScoped 

 public class CadastroCliente {

private Cliente cliente;

public Cliente getCliente() { return cliente; }

public void setCliente(Cliente cliente) { this.cliente = cliente; }

public String novo() {

this.cliente = new Cliente();

return "clientescad";

}

}

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 27/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros: Telas

 <h:panelGrid columns="3"> 

 

...

<p:inputText id="nome" value="#{cadCliente.cliente.nome}" ... /> 

...

<p:selectOneRadio value="#{cadCliente.cliente.sexoMasc}"> 

<f:selectItem itemLabel="Masculino" itemValue="true"/> 

...

<p:calendar id="nasc" value="#{cadCliente.cliente.nascimento}" ... /> 

...

<p:inputText id="mail" value="#{cadCliente.cliente.email}"/> 

...

 <p:selectOneMenu value="#{cadCliente.cliente.escolaridade}"> 

<f:selectItem itemLabel="Fundamental" itemValue="f"/> 

...

 </h:panelGrid> 

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 28/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros: Telas

 <h:panelGrid columns="3"> 

 

...

<p:inputText id="nome" value="#{cadCliente.cliente.nome}" ... /> 

...

<p:selectOneRadio value="#{cadCliente.cliente.sexoMasc}"> 

<f:selectItem itemLabel="Masculino" itemValue="true"/> 

...

<p:calendar id="nasc" value="#{cadCliente.cliente.nascimento}" ... /> 

...

<p:inputText id="mail" value="#{cadCliente.cliente.email}"/> 

...

 <p:selectOneMenu value="#{cadCliente.cliente.escolaridade}"> 

<f:selectItem itemLabel="Fundamental" itemValue="f"/> 

...

 </h:panelGrid> 

@ManagedBean(name="cadCliente")@SessionScoped 

 public class CadastroCliente {

@ManagedBean(name="cadCliente")

@SessionScoped  public class CadastroCliente {

private Cliente cliente; 

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 29/69

 

Prof. Adilson Vahldick ([email protected])

Menu: index.xhtml

<h:body> 

<h:form> 

<p:menubar> 

<p:menuitem value="Clientes" action="#{cadCliente.novo}" ajax="false"/> 

</p:menubar> 

</h:form> 

</h:body>   public String novo () {

this.cliente = new Cliente();

return "clientescad";

}

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 30/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros

Testar : http://localhost:8080/app1/

Experimente clicar em [Salvar]

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 31/69

 

Prof. Adilson Vahldick ([email protected])

Formulários

Observe: index.xhtml: menubar  clientescad.xhtml: input's e commandButton's

TODOS DENTRO DE <h:form>

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 32/69

 

Prof. Adilson Vahldick ([email protected])

Cadastro: Botão Cancelar 

 

...

public class CadastroCliente {

...

public String cancelar() {

return "index";

}

}

<p:commandButton value="Cancelar" ajax="false" immediate="true"action="#{cadCliente.cancelar}"/> 

Sem validações

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 33/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros: Validação

<p:inputText id="mail" value="#{cadCliente.cliente.email}"

required="true" validator="#{cadCliente.validarEmail}" /> 

public void validarEmail(FacesContext facesContex, UIComponent validate,

Object value) throws ValidatorException {

String email = (String) value;

if (email.indexOf("@") < 1) {

FacesMessage msg =

new FacesMessage(FacesMessage.SEVERITY_ERROR,"E-mail inválido.", "E-mail inválido.");

throw new ValidatorException(msg);

}

}

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 34/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros: Validação

Testar : http://localhost:8080/app1/

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 35/69

 

Prof. Adilson Vahldick ([email protected])

Growl

<p:growl/> sticky=”false”: se deve ser fechado pelo usuário Life=”6000”: tempo para fechamento automático

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 36/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros: Growl

 <h:body> 

<p:growl autoUpdate="true"/> 

...

<h:panelGrid columns="2">  

...

<p:message for="nome"/> 

...<h:outputText/> 

...

<p:message for="nasc"/> 

...

<p:message for="mail"/> 

... <h:outputText/> 

...

</h:panelGrid> 

 </h:body> 

C G

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 37/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros: Growl

Testar : http://localhost:8080/app1/

C d t V lid ã

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 38/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros: Validação

 <p:commandButton value="Salvar" actionListener="#{cadCliente.salvar}"/> 

public static List<Cliente> clientes = new ArrayList<Cliente>();

private static int contaId = 1;

public void salvar() {

System.out.println("salvo");

if (cliente.getId() == 0) {

cliente.setId(contaId);contaId++;

clientes.add(cliente);

}

}

C d t S l

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 39/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros: Salvar 

Testar : http://localhost:8080/app1/

Deixe o form inválido e clique em salvar  Depois deixe válido e clique em salvar  Observe a saída da console

Di l

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 40/69

 

Prof. Adilson Vahldick ([email protected])

Dialog

<p:dialog/> modal=”false” header=”Texto do título” resizable=”true” closeable=”true” widgetVar : nome da variável para acessar via JS os métodosshow() e hide()

C d t Di l

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 41/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros: Dialog

 <p:commandButton value="Dialog" type="button" onclick="ss.show()"/>   <p:dialog id="salvo" header="Salvo" widgetVar="ss"

closable="false" modal="true"> 

<h:outputText value="Cliente salvo com sucesso"/><br/> 

<p:commandButton value="Fechar" type="button" onclick="ss.hide()"/> 

 </p:dialog> 

Testar : http://localhost:8080/app1/

C d t Di l

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 42/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros: Dialog

 <p:commandButton value="Salvar" actionListener="#{cadCliente.salvar}"

  update="salvo"/> 

 <p:dialog id="salvo" header="Salvo" visible="#{cadCliente.salvo}" ...> 

<h:outputText value="Cliente salvo com sucesso"/><br/> 

  <p:commandButton value="Fechar" ajax="false"action="#{cadCliente.cancelar}"/> 

 </p:dialog> 

private boolean salvo;

public boolean isSalvo() { return this.salvo; }

public String novo() { this.salvo = false; ... }

public void salvar() { ... this.salvo = true; }

C d t Di l

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 43/69

 

Prof. Adilson Vahldick ([email protected])

Cadastros: Dialog

Testar : http://localhost:8080/app1/

E í i

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 44/69

 

Prof. Adilson Vahldick ([email protected])

Exercício

Com base no trabalho da equipe, desenvolvaum dos cadastros, considerando que ele nãotenha relação com os outros cadastros

Li t

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 45/69

 

Prof. Adilson Vahldick ([email protected])

Listagens

<p:dataTable/> value: fonte de dados das linhas da tabela var: nome da variável que vai guardar cada item

<p:dataTable value="#{cadCliente.clientes}" var="cli"

emptyMessage="Sem clientes.">

</p:dataTable>

Li t

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 46/69

 

Prof. Adilson Vahldick ([email protected])

Listagens

<p:dataTable value="#{cadCliente.clientes}" var="cli" emptyMessage="Sem clientes.">

<p:column headerText="Nome">

<h:outputText value="#{cli.nome}"/>

</p:column>

  <p:column headerText="Nascimento">

<h:outputText value="#{cli.nascimento}">

<f:convertDateTime pattern="dd/MM/yyyy"/>

</h:outputText>

</p:column>

...

</p:dataTable>

public List<Cliente> getClientes() {return clientes;

}

Listagens

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 47/69

 

Prof. Adilson Vahldick ([email protected])

Listagens

<?xml version='1.0' encoding='UTF-8' ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"

xmlns:h="http://java.sun.com/jsf/html"

xmlns:p="http://primefaces.org/ui"

xmlns:f="http://java.sun.com/jsf/core">

<h:head>

<title>Clientes</title>

</h:head>

<h:body>

<h:form>

<p:dataTable value="#{cadCliente.clientes}" var="cli" emptyMessage="Sem clientes.">

...

</p:dataTable><p:commandButton ajax="false" value="Novo" action="#{cadCliente.novo}"/>

</h:form>

</h:body>

</html>

clienteslist.xhtml

Menu: index xhtml

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 48/69

 

Prof. Adilson Vahldick ([email protected])

Menu: index.xhtml

<h:body> 

<h:form> 

<p:menubar> 

<p:menuitem value="Clientes" url="clienteslist.jsf" ajax="false"/> 

</p:menubar> 

</h:form> 

</h:body> 

Cadastro: Botão Cancelar

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 49/69

 

Prof. Adilson Vahldick ([email protected])

Cadastro: Botão Cancelar 

 

...

public class CadastroCliente {

...

public String cancelar() {

return "clienteslist";

}

}

Listagens

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 50/69

 

Prof. Adilson Vahldick ([email protected])

Listagens

Testar : http://localhost:8080/app1/

Listagens: editar

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 51/69

 

Prof. Adilson Vahldick ([email protected])

Listagens: editar 

<p:dataTable value="#{cadCliente.clientes}" var="cli" emptyMessage="Sem clientes.">

<p:column>

<p:commandButton image="ui-icon ui-icon-pencil" title="Editar"

action="#{cadCliente.alterar }"><f:setPropertyActionListener value="#{cli}" target="#{cadCliente.cliente}" />

</p:commandButton>

</p:column>

...

</p:dataTable>

public String alterar () {this.salvo = false;return "clientescad";

}

Listagens: editar

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 52/69

 

Prof. Adilson Vahldick ([email protected])

Listagens: editar 

Testar : http://localhost:8080/app1/

Listagens: excluir

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 53/69

 

Prof. Adilson Vahldick ([email protected])

Listagens: excluir 

Listagens: excluir

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 54/69

 

Prof. Adilson Vahldick ([email protected])

Listagens: excluir 

<p:dataTable id="clientes" value="#{cadCliente.clientes}" var="cli"

emptyMessage="Sem clientes.">

<p:column>

...

  <p:commandButton image="ui-icon ui-icon-close" title="Excluir"

onclick="confDelete.show()">

<f:setPropertyActionListener value="#{cli}" target="#{cadCliente.cliente}" />

</p:commandButton>

</p:column>

...

</p:dataTable>

Listagens: excluir

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 55/69

 

Prof. Adilson Vahldick ([email protected])

Listagens: excluir 

...

<p:commandButton ajax="false" value="Novo" action="#{cadCliente.novo}"/>

<p:confirmDialog message="Deseja realmente excluir esse cliente ?" width="400"

header="Excluir" severity="alert" widgetVar="confDelete">

<p:commandButton value="Sim" update="clientes" oncomplete="confDelete.hide()"

actionListener="#{cadCliente.excluir }" /><p:commandButton value="Não" onclick="confDelete.hide()" type="button" />

</p:confirmDialog>

</h:form>public void excluir () {

clientes.remove(cliente);}

Teste e Exercício

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 56/69

 

Prof. Adilson Vahldick ([email protected])

Teste e Exercício

Testar a exclusão : http://localhost:8080/app1/

Exercício: Desenvolva uma tela de listagem que façaacesso aquela tela de cadastro do exercícioanterior 

Templates

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 57/69

 

Prof. Adilson Vahldick ([email protected])

Templates

<?xml version='1.0' encoding='UTF-8' ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"

xmlns:h="http://java.sun.com/jsf/html"

  xmlns:ui="http://java.sun.com/jsf/facelets" >

<h:head>

<title>Meu JSF</title>

</h:head>

<h:body>  <ui:include src="menu.xhtml"/>

<ui:insert name="corpo"/></h:body>

</html>

template.xhtml

Templates

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 58/69

 

Prof. Adilson Vahldick ([email protected])

Templates

<ui:composition xmlns="http://www.w3.org/1999/xhtml"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:p="http://primefaces.org/ui"xmlns:h="http://java.sun.com/jsf/html">

<h:form>

<p:menubar>

<p:menuitem value="Clientes" url="clienteslist.jsf" ajax="false"/>

</p:menubar>

</h:form>

</ui:composition>

menu.xhtml

Templates

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 59/69

 

Prof. Adilson Vahldick ([email protected])

Templates

<ui:composition xmlns="http://www.w3.org/1999/xhtml"xmlns:ui="http://java.sun.com/jsf/facelets"template="template.xhtml">

</ui:composition>

index.xhtml

Templates

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 60/69

 

Prof. Adilson Vahldick ([email protected])

Templates

<ui:composition xmlns="http://www.w3.org/1999/xhtml"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:p="http://primefaces.org/ui"xmlns:f="http://java.sun.com/jsf/core"xmlns:h="http://java.sun.com/jsf/html">

<ui:define name="corpo"><h:form>...

</h:form></ui:define></ui:composition>

clienteslist.xhtml e clientescad.xhtml

Teste e Exercício

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 61/69

 

Prof. Adilson Vahldick ([email protected])

Teste e Exercício

Testar template :

http://localhost:8080/app1/

Exercício: Aplique o template nas outras duas telas

Faça um cadastro de contas que contenha osseguintes atributos: Número (String no formato 9999-9) Cliente

Prepare a listagem e o cadastro, mas considerepor enquanto somente a digitação do número. UseInputMask

ContaBancaria

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 62/69

 

Prof. Adilson Vahldick ([email protected])

ContaBancaria

package modelo;

public class ContaBancaria {

private long id;

private String numero;

private Cliente cliente;

// métodos acessores

}

CadastroContas

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 63/69

 

Prof. Adilson Vahldick ([email protected])

CadastroContas

package controle;

 // imports

@ManagedBean(name = "cadContas")

@SessionScoped

public class CadastroContas {

private ContaBancaria conta;

private boolean salvo;

// métodos acessores

public static List<ContaBancaria> contas =

new ArrayList<ContaBancaria>();

private static int contaId = 1;

public List<ContaBancaria> getContas() {

return contas;

}

public String alterar() {

this.salvo = false;

return "contascad";

}

public String novo() {

this.salvo = false;

this.conta = new ContaBancaria();

return "contascad";

}

public String cancelar() { return "contaslist"; }

 

public void salvar() {this.salvo = true;

if (conta.getId() == 0) {

conta.setId(contaId);

contaId++;

contas.add(conta);

}

}

public void excluir() { contas.remove(conta); }

}

contascad xhtml

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 64/69

 

Prof. Adilson Vahldick ([email protected])

contascad.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml" ... template="template.xhtml">

<ui:define name="corpo">

<p:growl autoUpdate="true"/><p:panel header="Cadastro de Contas" style="width: 600px">

<h:form>

<h:panelGrid columns="2" id="grid">

<h:outputText value="Número :"/>

<p:inputMask id="nome" value="#{cadContas.conta.numero}" required="true" mask="9999-9"/>

<h:outputText value="Cliente :"/>

<h:outputText value="Aqui vai para selecionar o cliente"/>

</h:panelGrid>

<hr/>

// aqui vai o <p:outputPanel> com os botões de Salvar e Cancelar 

// aqui vai a janela de diálogo sobre o sucesso do salvamento da Conta

</h:form>

</p:panel>

</ui:define>

</ui:composition>

contaslist.xhtml

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 65/69

 

Prof. Adilson Vahldick ([email protected])

contaslist.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml" ... template="template.xhtml">

<ui:define name="corpo">

<h:form><p:dataTable id="clientes" value="#{cadContas.contas}" var="conta" emptyMessage="Sem contas.">

<p:column headerText="Número">

<h:outputText value="#{conta.numero}"/>

</p:column>

<p:column headerText="Cliente">

</p:column>

<p:column>

// aqui vão os botões de editar e excluir 

</p:column>

</p:dataTable>

// aqui vai o botão Novo

// aqui vai a janela de diálogo perguntando da exclusão da conta</h:form>

</ui:define>

</ui:composition>

Cadastro de Contas

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 66/69

 

Prof. Adilson Vahldick ([email protected])

Cadastro de Contas

Teste inclusão, alteração e exclusão de contas : http://localhost:8080/app1/

Botando para funcionar a seleção de clientes

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 67/69

 

Prof. Adilson Vahldick ([email protected])

Botando para funcionar a seleção de clientes

<h:outputText value="Cliente :"/><p:selectOneMenu value="#{cadContas.conta.cliente}">

<f:selectItems value="#{cadCliente.clientes}" var="cli"

itemLabel="#{cli.nome}"/>

</p:selectOneMenu>

contascad.xhtml

Teste a inclusão:

http://localhost:8080/app1/

Botando para funcionar a seleção de clientes

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 68/69

 

Prof. Adilson Vahldick ([email protected])

package conversores;

// imports

@FacesConverter(forClass=Cliente.class)

public class ClienteConverter implements Converter {

public String getAsString(FacesContext fc, UIComponent uic, Object o) {

Cliente c = (Cliente)o;

return c.getId() + "";}

public Object getAsObject(FacesContext fc, UIComponent uic, String value) {

long chave = Long.valueOf(value);

for (Cliente c:CadastroCliente.clientes) {

if (c.getId() == chave)return c;

}

return null;

}

}

Botando para funcionar a seleção de clientes

Botando para funcionar a seleção de clientes

5/14/2018 01-jsf - slidepdf.com

http://slidepdf.com/reader/full/01-jsf 69/69

Prof. Adilson Vahldick ([email protected])

Botando para funcionar a seleção de clientes

 Acerte a coluna da lista para mostrar o nome docliente

Teste inclusão, alteração e exclusão de contas : http://localhost:8080/app1/