01-jsf
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/