Tutorial – Desenvolvendo uma Aplicação CRUD para Web a partir de um diagrama de classes da UML 1) Vamos criar uma aplicação que faz realiza as funcionalidades CRUD de todas as entidades especificadas pelo diagrama de classes abaixo. 2) Crie um novo Dynamic Web Project chamado Projeto_Crud configurado com o Hibernate, JSF e MySQL. 3) Abra o arquivo persistence.xml dentro da pasta src/META-INF e preencha-o com o seguinte código: <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" > <persistence-unit name="Projeto_Crud" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/crud"/> <property name="javax.persistence.jdbc.user" value="root"/> <property name="javax.persistence.jdbc.password" value="root"/> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.show_sql" value="true"/> </properties> </persistence-unit> </persistence> 4) Dentro da pasta src do Projeto_Crud vamos criar 4 pacotes: modelo, fachada, converters e beansgerenciados. Para criar um novo pacote dentro da pasta src, basta clicar com o botão direito do mouse sobre a pasta src e ir em New > Other.. > Package. 5) A estrutura do Projeto deve ficar como mostra a figura abaixo: 6) Agora, vamos criar as classes em Java que representam esse diagrama. Para isso, devemos criar 4 classes dentro do pacote modelo: Pessoa, Aluno, Curso e Disciplina. Todas devem conter os atributos especificados no diagrama e as anotações para realizar a persistência em banco de dados. Segue abaixo o código fonte das 4 classes: Pessoa.java package modelo; import java.io.Serializable; import javax.persistence.*; import java.util.Date; @Entity @Inheritance(strategy = InheritanceType.JOINED) @Table(name = "pessoa") public class Pessoa implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name = "CPF", nullable=false) private String cpf; @Basic(optional = false) @Column(name = "NOME", nullable=false) private String nome; @Basic(optional = false) @Column(name = "DATANASCIMENTO", nullable=false) private Date dataNascimento; @Basic(optional = false) @Column(name = "TELEFONE", nullable=true) private String telefone; public Pessoa() { } public String getCpf() { return cpf; } public void setCpf(String cpf) { this.cpf = cpf; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public Date getDataNascimento() { return dataNascimento; } public void setDataNascimento(Date dataNascimento) { this.dataNascimento = dataNascimento; } public String getTelefone() { return telefone; } public void setTelefone(String telefone) { this.telefone = telefone; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Pessoa)) { return false; } Pessoa other = (Pessoa) object; if (!(this.getCpf().equals(other.getCpf()))) { return false; } return true; } } Aluno.java package modelo; import java.io.Serializable; import javax.persistence.*; @Entity @Table(name = "aluno") public class Aluno extends Pessoa implements Serializable { private static final long serialVersionUID = 1L; @Basic(optional = false) @Column(name = "RA", nullable=false) private int ra; @Basic(optional = false) @Column(name = "EMAIL", nullable=false) private String email; @Basic(optional = false) @Column(name = "ESCOLARIDADE", nullable=true) private String escolaridade; @JoinColumn(name = "CURSO_ID", referencedColumnName = "ID", nullable=false) @ManyToOne private Curso curso; public Aluno() { } public int getRa() { return ra; } public void setRa(int ra) { this.ra = ra; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getEscolaridade() { return escolaridade; } public void setEscolaridade(String escolaridade) { this.escolaridade = escolaridade; } public Curso getCurso() { return curso; } public void setCurso(Curso curso) { this.curso = curso; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Aluno)) { return false; } Aluno other = (Aluno) object; if (!(this.getCpf().equals(other.getCpf()))) { return false; } return true; } } Curso.java package modelo; import java.io.Serializable; import javax.persistence.*; @Entity @Table(name = "curso") public class Curso implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID", nullable=false) private int id; @Basic(optional = false) @Column(name = "NOME", nullable=false) private String nome; @Basic(optional = false) @Column(name = "NOMEDEPARTAMENTO", nullable=false) private String nomeDepartamento; @Basic(optional = false) @Column(name = "CARGAHORARIA", nullable=true) private int cargaHoraria; public Curso() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getNomeDepartamento() { return nomeDepartamento; } public void setNomeDepartamento(String nomeDepartamento) { this.nomeDepartamento = nomeDepartamento; } public int getCargaHoraria() { return cargaHoraria; } public void setCargaHoraria(int cargaHoraria) { this.cargaHoraria = cargaHoraria; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Curso)) { return false; } Curso other = (Curso) object; if (!(this.getId() == other.getId())) { return false; } return true; } } Disciplina.java package modelo; import java.io.Serializable; import javax.persistence.*; import modelo.Curso; @Entity @Table(name = "disciplina") public class Disciplina implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID", nullable=false) private int id; @Basic(optional = false) @Column(name = "NOME", nullable=false) private String nome; @Basic(optional = false) @Column(name = "QUANTIDADECREDITOS", nullable=true) private int quantidadeCreditos; @Basic(optional = false) @Column(name = "NOMEPROFESSOR", nullable=true) private String nomeProfessor; @JoinColumn(name = "CURSO_ID", referencedColumnName = "ID", nullable=false) @ManyToOne private Curso curso; public Disciplina() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public int getQuantidadeCreditos() { return quantidadeCreditos; } public void setQuantidadeCreditos(int quantidadeCreditos) { this.quantidadeCreditos = quantidadeCreditos; } public String getNomeProfessor() { return nomeProfessor; } public void setNomeProfessor(String nomeProfessor) { this.nomeProfessor = nomeProfessor; } public Curso getCurso() { return curso; } public void setCurso(Curso curso) { this.curso = curso; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Disciplina)) { return false; } Disciplina other = (Disciplina) object; if (!(this.getId() == other.getId())) { return false; } return true; } } 7) Agora, vamos criar as classes no padrão Fachada para acesso das classes Pessoa, Aluno, Disciplina e Curso ao banco de Dados. Iremos criar 5 novas classes dentro do pacote fachada, sendo: AbstractFacade, PessoaFacade, AlunoFacade, CursoFacade e DisciplinaFacade. Segue abaixo o código de cada uma dessas classes: AbstractFacade.java package fachada; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public abstract class AbstractFacade<T> { private Class<T> entityClass; protected static EntityManagerFactory emf = Persistence.createEntityManagerFactory("Projeto_Crud"); public AbstractFacade(Class<T> entityClass) { this.entityClass = entityClass; } protected abstract EntityManager getEntityManager(); public void create(T entity) { try { getEntityManager().getTransaction().begin(); getEntityManager().persist(entity); getEntityManager().getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); } } public void edit(T entity) { try { getEntityManager().getTransaction().begin(); getEntityManager().merge(entity); getEntityManager().getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); } } public void remove(T entity) { try { getEntityManager().getTransaction().begin(); getEntityManager().remove(getEntityManager().merge(entity)); getEntityManager().getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); } } public T find(Object id) { return getEntityManager().find(entityClass, id); } @SuppressWarnings({ "unchecked", "rawtypes" }) public List<T> findAll() { javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery(); cq.select(cq.from(entityClass)); return getEntityManager().createQuery(cq).getResultList(); } @SuppressWarnings({ "unchecked", "rawtypes" }) public List<T> findRange(int[] range) { javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery(); cq.select(cq.from(entityClass)); javax.persistence.Query q = getEntityManager().createQuery(cq); q.setMaxResults(range[1] - range[0]); q.setFirstResult(range[0]); return q.getResultList(); } @SuppressWarnings({ "unchecked", "rawtypes" }) public int count() { javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery(); javax.persistence.criteria.Root<T> rt = cq.from(entityClass); cq.select(getEntityManager().getCriteriaBuilder().count(rt)); javax.persistence.Query q = getEntityManager().createQuery(cq); return ((Long) q.getSingleResult()).intValue(); } } PessoaFacade.java package fachada; import javax.persistence.EntityManager; import modelo.Pessoa; public class PessoaFacade extends AbstractFacade<Pessoa> { private EntityManager em = AbstractFacade.emf.createEntityManager(); protected EntityManager getEntityManager() { return em; } public PessoaFacade() { super(Pessoa.class); } } AlunoFacade.java package fachada; import javax.persistence.EntityManager; import modelo.Aluno; public class AlunoFacade extends AbstractFacade<Aluno> { private EntityManager em = AbstractFacade.emf.createEntityManager(); protected EntityManager getEntityManager() { return em; } public AlunoFacade() { super(Aluno.class); } } CursoFacade.java package fachada; import javax.persistence.EntityManager; import modelo.Curso; public class CursoFacade extends AbstractFacade<Curso> { private EntityManager em = AbstractFacade.emf.createEntityManager(); protected EntityManager getEntityManager() { return em; } public CursoFacade() { super(Curso.class); } } DisciplinaFacade.java package fachada; import javax.persistence.EntityManager; import modelo.Disciplina; public class DisciplinaFacade extends AbstractFacade<Disciplina> { private EntityManager em = AbstractFacade.emf.createEntityManager(); protected EntityManager getEntityManager() { return em; } public DisciplinaFacade() { super(Disciplina.class); } } 8) Agora, vamos criar os Beans Gerenciados que vão receber as requisições das páginas Web da aplicação. Vamos criar 4 beans gerenciados dentro do pacote beansgerenciados: PessoaManagedBean, AlunoManagedBean, CursoManagedBean e DisciplinaManagedBean. Os códigos desses beans gerenciados seguem abaixo: PessoaManagedBean.java package beansgerenciados; import import import import import import import import java.util.ArrayList; java.util.List; javax.faces.model.SelectItem; javax.faces.event.ActionEvent; javax.faces.bean.ManagedBean; javax.faces.bean.RequestScoped; fachada.PessoaFacade; modelo.Pessoa; @ManagedBean(name="PessoaManagedBean") @RequestScoped public class PessoaManagedBean { private Pessoa pessoa = new Pessoa(); private PessoaFacade pessoaFacade = new PessoaFacade(); public PessoaManagedBean() { } public Pessoa getPessoa() { return pessoa; } public void setPessoa(Pessoa pessoa) { this.pessoa = pessoa; } public String newPessoa() { this.pessoaFacade.create(this.pessoa); return "newSuccess"; } public String editPessoa() { this.pessoaFacade.edit(this.pessoa); return "editSuccess"; } public void removePessoa(ActionEvent e) { String id = (String) e.getComponent().getAttributes().get("codPessoa"); this.pessoaFacade.remove(this.pessoaFacade.find(id)); } public void findPessoa(ActionEvent e) { String id = (String) e.getComponent().getAttributes().get("codPessoa"); this.pessoa = this.pessoaFacade.find(id); } public List<Pessoa> getListaPessoas() { return this.pessoaFacade.findAll(); } public List<SelectItem> getPessoas() { List<SelectItem> list = new ArrayList<SelectItem>(); List<Pessoa> it = getListaPessoas(); for (int i = 0; i < it.size(); i++) { Pessoa pessoa = it.get(i); list.add(new SelectItem(pessoa, pessoa.getCpf()+"")); } return list; } } AlunoManagedBean.java package beansgerenciados; import import import import import import import import java.util.ArrayList; java.util.List; javax.faces.model.SelectItem; javax.faces.event.ActionEvent; javax.faces.bean.ManagedBean; javax.faces.bean.RequestScoped; fachada.AlunoFacade; modelo.Aluno; @ManagedBean(name="AlunoManagedBean") @RequestScoped public class AlunoManagedBean { private Aluno aluno = new Aluno(); private AlunoFacade alunoFacade = new AlunoFacade(); public AlunoManagedBean() { } public Aluno getAluno() { return aluno; } public void setAluno(Aluno aluno) { this.aluno = aluno; } public String newAluno() { this.alunoFacade.create(this.aluno); return "newSuccess"; } public String editAluno() { this.alunoFacade.edit(this.aluno); return "editSuccess"; } public void removeAluno(ActionEvent e) { String id = (String) e.getComponent().getAttributes().get("codAluno"); this.alunoFacade.remove(this.alunoFacade.find(id)); } public void findAluno(ActionEvent e) { String id = (String) e.getComponent().getAttributes().get("codAluno"); this.aluno = this.alunoFacade.find(id); } public List<Aluno> getListaAlunos() { return this.alunoFacade.findAll(); } public List<SelectItem> getAlunos() { List<SelectItem> list = new ArrayList<SelectItem>(); List<Aluno> it = getListaAlunos(); for (int i = 0; i < it.size(); i++) { Aluno aluno = it.get(i); list.add(new SelectItem(aluno, aluno.getCpf()+"")); } return list; } } CursoManagedBean.java package beansgerenciados; import import import import import java.util.ArrayList; java.util.List; javax.faces.model.SelectItem; javax.faces.event.ActionEvent; javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; import fachada.CursoFacade; import modelo.Curso; @ManagedBean(name="CursoManagedBean") @RequestScoped public class CursoManagedBean { private Curso curso = new Curso(); private CursoFacade cursoFacade = new CursoFacade(); public CursoManagedBean() { } public Curso getCurso() { return curso; } public void setCurso(Curso curso) { this.curso = curso; } public String newCurso() { this.cursoFacade.create(this.curso); return "newSuccess"; } public String editCurso() { this.cursoFacade.edit(this.curso); return "editSuccess"; } public void removeCurso(ActionEvent e) { Integer id = (Integer) e.getComponent().getAttributes().get("codCurso"); this.cursoFacade.remove(this.cursoFacade.find(id)); } public void findCurso(ActionEvent e) { Integer id = (Integer) e.getComponent().getAttributes().get("codCurso"); this.curso = this.cursoFacade.find(id); } public List<Curso> getListaCursos() { return this.cursoFacade.findAll(); } public List<SelectItem> getCursos() { List<SelectItem> list = new ArrayList<SelectItem>(); List<Curso> it = getListaCursos(); for (int i = 0; i < it.size(); i++) { Curso curso = it.get(i); list.add(new SelectItem(curso, curso.getId()+"")); } return list; } } DisciplinaManagedBean.java package beansgerenciados; import import import import import import import import java.util.ArrayList; java.util.List; javax.faces.model.SelectItem; javax.faces.event.ActionEvent; javax.faces.bean.ManagedBean; javax.faces.bean.RequestScoped; fachada.DisciplinaFacade; modelo.Disciplina; @ManagedBean(name="DisciplinaManagedBean") @RequestScoped public class DisciplinaManagedBean { private Disciplina disciplina = new Disciplina(); private DisciplinaFacade disciplinaFacade = new DisciplinaFacade(); public DisciplinaManagedBean() { } public Disciplina getDisciplina() { return disciplina; } public void setDisciplina(Disciplina disciplina) { this.disciplina = disciplina; } public String newDisciplina() { this.disciplinaFacade.create(this.disciplina); return "newSuccess"; } public String editDisciplina() { this.disciplinaFacade.edit(this.disciplina); return "editSuccess"; } public void removeDisciplina(ActionEvent e) { Integer id = (Integer) e.getComponent().getAttributes().get("codDisciplina"); this.disciplinaFacade.remove(this.disciplinaFacade.find(id)); } public void findDisciplina(ActionEvent e) { Integer id = (Integer) e.getComponent().getAttributes().get("codDisciplina"); this.disciplina = this.disciplinaFacade.find(id); } public List<Disciplina> getListaDisciplinas() { return this.disciplinaFacade.findAll(); } public List<SelectItem> getDisciplinas() { List<SelectItem> list = new ArrayList<SelectItem>(); List<Disciplina> it = getListaDisciplinas(); for (int i = 0; i < it.size(); i++) { Disciplina disciplina = it.get(i); list.add(new SelectItem(disciplina, disciplina.getId()+"")); } return list; } } 9) Agora, vamos criar uma classe Converter para a classe Curso. Isso é necessário, pois na interface Web haverá um combobox para selecionar um curso no cadastro de Aluno e no cadastro de Disciplina. Essa classe converter facilita a conversão do texto escrito no combobox para o objeto referete aquele texto. Desta forma, vamos criar a classe CursoConverter dentro do pacote converters. CursoConverter.java package converters; import import import import import import javax.faces.component.UIComponent; javax.faces.context.FacesContext; javax.faces.convert.Converter; javax.faces.convert.FacesConverter; fachada.CursoFacade; modelo.Curso; @FacesConverter("CursoConverter") public class CursoConverter implements Converter { public Object getAsObject(FacesContext context, UIComponent component, String value) { return new CursoFacade().find(new Integer(value)); } } public String getAsString(FacesContext context, UIComponent component, Object value) { Curso curso = (Curso) value; return curso.getId()+""; } 10) Agora vamos criar as páginas Web utilizando o framework JSF. Para cada uma das classes do pacote modelo (Pessoa, Aluno, Curso, Disciplina) deverão ser criadas 3 páginas Web (cadastrar, editar e listar) e uma página index (página inicial). 11) Dentro da pasta WebContent crie 4 novas pastas: Pessoa, Aluno, Curso e Disciplina. Para criar uma nova pasta dentro da pasta WebContent, clique com o botão direito do mouse em cima da pasta WebContent, vá em New > Folder. Digite o nome da nova pasta e clique em OK. 12) Criada as 4 pastas, vamos criar as páginas Web referente a Pessoa, dentro da pasta Pessoa. Para criar uma nova página Web vá em New > Other.. E procure por JSP File. newPessoa.jsp <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>New Pessoa</title> </head> <body> <div class="line-separator"></div> <div style="text-align:center"> <h1 class="title">New Pessoa</h1> </div> <div class="line-separator"></div> <br> <h:form> <h:panelGrid columns="2" styleClass="table"> <h:outputText value="cpf"/> <h:inputText required="true" label="cpf" value="#{PessoaManagedBean.pessoa.cpf}"/> <h:outputText value="nome"/> <h:inputText required="true" label="nome" value="#{PessoaManagedBean.pessoa.nome}"/> <h:outputText value="dataNascimento"/> <h:inputText required="true" label="dataNascimento" value="#{PessoaManagedBean.pessoa.dataNascimento} "> <f:convertDateTime pattern="dd/MM/yyyy"/> </h:inputText> <h:outputText value="telefone"/> <h:inputText label="telefone" value="#{PessoaManagedBean.pessoa.telefone}"/> </h:panelGrid> <br> <h:messages errorClass="error"></h:messages> <div style="text-align:center"> <h:commandButton value="Save" action="#{PessoaManagedBean.newPessoa}" styleClass="save"/> <h:commandButton value="Cancel" immediate="true" action="listPessoa" styleClass="cancel"/> </div> </h:form> </body> </html> </f:view> editPessoa.jsp <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>Edit Pessoa</title> </head> <body> <div class="line-separator"></div> <div style="text-align:center"> <h1 class="title">Edit Pessoa</h1> </div> <div class="line-separator"></div> <br> <h:form> <table class="table"> <tr> <td>cpf</td> <td> <h:inputHidden value="#{PessoaManagedBean.pessoa.cpf}"/> <h:inputText disabled="true" value="#{PessoaManagedBean.pessoa.cpf}"/> </td> </tr> <tr> <td>nome</td> <td> <h:inputText required="true" label="nome" value="#{PessoaManagedBean.pessoa.nome}"/> </td> </tr> <tr> <td>dataNascimento</td> <td> <h:inputText required="true" label="dataNascimento" value="#{PessoaManagedBean.pessoa.dataNascimento}"> <f:convertDateTime pattern="dd/MM/yyyy"/> </h:inputText> </td> </tr> <tr> <td>telefone</td> <td> <h:inputText label="telefone" value="#{PessoaManagedBean.pessoa.telefone}"/> </td> </tr> </table> <br> <h:messages errorClass="error"></h:messages> <div style="text-align:center"> <h:commandButton value="Save" action="#{PessoaManagedBean.editPessoa}" styleClass="save"/> <h:commandButton value="Cancel" immediate="true" action="listPessoa" styleClass="cancel"/> </div> </h:form> </body> </html> </f:view> listPessoa.jsp <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>List of Pessoa</title> </head> <body> <div class="line-separator"></div> <div style="text-align:center"> <h1 class="title">List of Pessoa</h1> </div> <div class="line-separator"></div> <br> <h:form> <h:dataTable value="#{PessoaManagedBean.listaPessoas} " var="item" styleClass="list_table" headerClass="header" rowClasses="row1,row2"> <h:column> <f:facet name="header" > <h:outputText value="cpf"/> </f:facet> <h:outputText value="#{item.cpf}"/> </h:column> <h:column> <f:facet name="header" > <h:outputText value="nome"/> </f:facet> <h:outputText value="#{item.nome}"/> </h:column> <h:column> <f:facet name="header" > <h:outputText value="dataNascimento"/> </f:facet> <h:outputText value="#{item.dataNascimento}"> <f:convertDateTime pattern="dd/MM/yyyy"/> </h:outputText> </h:column> <h:column> <f:facet name="header" > <h:outputText value="telefone"/> </f:facet> <h:outputText value="#{item.telefone}"/> </h:column> <h:column> <f:facet name="header" > <h:outputText value="Editar"/> </f:facet> <h:commandLink value="editar" type="submit" action="editPessoa" actionListener="#{PessoaManagedBean.findPessoa}" > <f:attribute name="codPessoa" value="#{item.cpf}"/> </h:commandLink> </h:column> <h:column> <f:facet name="header" > <h:outputText value="Remover"/> </f:facet> <h:commandLink value="remover" type="submit" actionListener="#{PessoaManagedBean.removePessoa}" > <f:attribute name="codPessoa" value="#{item.cpf}"/> </h:commandLink> </h:column> </h:dataTable> <br> <div style="text-align:center"> <h:commandButton value="Back to Index" immediate="true" action="index" styleClass="button"/> <h:commandButton value="New Pessoa" immediate="true" action="newPessoa" styleClass="button"/> </div> </h:form> </body> </html> </f:view> 13) Vamos criar as páginas Web referente ao Aluno dentro da pasta Aluno. newAluno.jsp <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>New Aluno</title> </head> <body> <div class="line-separator"></div> <div style="text-align:center"> <h1 class="title">New Aluno</h1> </div> <div class="line-separator"></div> <br> <h:form> <h:panelGrid columns="2" styleClass="table"> <h:outputText value="cpf"/> <h:inputText required="true" label="cpf" value="#{AlunoManagedBean.aluno.cpf}"/> <h:outputText value="nome"/> <h:inputText required="true" label="nome" value="#{AlunoManagedBean.aluno.nome}"/> <h:outputText value="dataNascimento"/> <h:inputText required="true" label="dataNascimento" value="#{AlunoManagedBean.aluno.dataNascimento} "> <f:convertDateTime pattern="dd/MM/yyyy"/> </h:inputText> <h:outputText value="telefone"/> <h:inputText label="telefone" value="#{AlunoManagedBean.aluno.telefone} "/> <h:outputText value="ra"/> <h:inputText required="true" label="ra" value="#{AlunoManagedBean.aluno.ra}"/> <h:outputText value="email"/> <h:inputText required="true" label="email" value="#{AlunoManagedBean.aluno.email}"/> <h:outputText value="escolaridade"/> <h:inputText label="escolaridade" value="#{AlunoManagedBean.aluno.escolaridade} "/> <h:outputText value="curso"/> <h:selectOneMenu required="true" label="curso" value="#{AlunoManagedBean.aluno.curso}"> <f:selectItems value="#{CursoManagedBean.cursos}" /> <f:converter converterId="CursoConverter"/> </h:selectOneMenu> </h:panelGrid> <br> <h:messages errorClass="error"></h:messages> <div style="text-align:center"> <h:commandButton value="Save" action="#{AlunoManagedBean.newAluno}" styleClass="save"/> <h:commandButton value="Cancel" immediate="true" action="listAluno" styleClass="cancel"/> </div> </h:form> </body> </html> </f:view> editAluno.jsp <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>Edit Aluno</title> </head> <body> <div class="line-separator"></div> <div style="text-align:center"> <h1 class="title">Edit Aluno</h1> </div> <div class="line-separator"></div> <br> <h:form> <table class="table"> <tr> <td>cpf</td> <td> <h:inputHidden value="#{AlunoManagedBean.aluno.cpf}"/> <h:inputText disabled="true" value="#{AlunoManagedBean.aluno.cpf}"/> </td> </tr> <tr> <td>nome</td> <td> <h:inputText required="true" label="nome" value="#{AlunoManagedBean.aluno.nome}"/> </td> </tr> <tr> <td>dataNascimento</td> <td> <h:inputText required="true" label="dataNascimento" value="#{AlunoManagedBean.aluno.dataNascimento}"> <f:convertDateTime pattern="dd/MM/yyyy"/> </h:inputText> </td> </tr> <tr> <td>telefone</td> <td> <h:inputText label="telefone" value="#{AlunoManagedBean.aluno.telefone} "/> </td> </tr> <tr> <td>ra</td> <td> <h:inputText required="true" label="ra" value="#{AlunoManagedBean.aluno.ra}"/> </td> </tr> <tr> <td>email</td> <td> <h:inputText required="true" label="email" value="#{AlunoManagedBean.aluno.email}"/> </td> </tr> <tr> <td>escolaridade</td> <td> <h:inputText label="escolaridade" value="#{AlunoManagedBean.aluno.escolaridade}"/> </td> </tr> <tr> <td>curso</td> <td> <h:selectOneMenu required="true" label="curso" value="#{AlunoManagedBean.aluno.curso}"> <f:selectItems value="#{CursoManagedBean.cursos}" /> <f:converter converterId="CursoConverter"/> </h:selectOneMenu> </td> </tr> </table> <br> <h:messages errorClass="error"></h:messages> <div style="text-align:center"> <h:commandButton value="Save" action="#{AlunoManagedBean.editAluno}" styleClass="save"/> <h:commandButton value="Cancel" immediate="true" action="listAluno" styleClass="cancel"/> </div> </h:form> </body> </html> </f:view> listAluno.jsp <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>List of Aluno</title> </head> <body> <div class="line-separator"></div> <div style="text-align:center"> <h1 class="title">List of Aluno</h1> </div> <div class="line-separator"></div> <br> <h:form> <h:dataTable value="#{AlunoManagedBean.listaAlunos} " var="item" styleClass="list_table" headerClass="header" rowClasses="row1,row2"> <h:column> <f:facet name="header" > <h:outputText value="cpf"/> </f:facet> <h:outputText value="#{item.cpf}"/> </h:column> <h:column> <f:facet name="header" > <h:outputText value="nome"/> </f:facet> <h:outputText value="#{item.nome}"/> </h:column> <h:column> <f:facet name="header" > <h:outputText value="dataNascimento"/> </f:facet> <h:outputText value="#{item.dataNascimento}"> <f:convertDateTime pattern="dd/MM/yyyy"/> </h:outputText> </h:column> <h:column> <f:facet name="header" > <h:outputText value="telefone"/> </f:facet> <h:outputText value="#{item.telefone}"/> </h:column> <h:column> <f:facet name="header" > <h:outputText value="ra"/> </f:facet> <h:outputText value="#{item.ra}"/> </h:column> <h:column> <f:facet name="header" > <h:outputText value="email"/> </f:facet> <h:outputText value="#{item.email}"/> </h:column> <h:column> <f:facet name="header" > <h:outputText value="escolaridade"/> </f:facet> <h:outputText value="#{item.escolaridade}"/> </h:column> <h:column> <f:facet name="header" > <h:outputText value="curso"/> </f:facet> <h:outputText value="#{item.curso}"> <f:converter converterId="CursoConverter"/> </h:outputText> </h:column> <h:column> <f:facet name="header" > <h:outputText value="Editar"/> </f:facet> <h:commandLink value="editar" type="submit" action="editAluno" actionListener="#{AlunoManagedBean.findAluno}" > <f:attribute name="codAluno" value="#{item.cpf}"/> </h:commandLink> </h:column> <h:column> <f:facet name="header" > <h:outputText value="Remover"/> </f:facet> <h:commandLink value="remover" type="submit" actionListener="#{AlunoManagedBean.removeAluno}" > <f:attribute name="codAluno" value="#{item.cpf}"/> </h:commandLink> </h:column> </h:dataTable> <br> <div style="text-align:center"> <h:commandButton value="Back to Index" immediate="true" action="index" styleClass="button"/> <h:commandButton value="New Aluno" immediate="true" action="newAluno" styleClass="button"/> </div> </h:form> </body> </html> </f:view> 14) Vamos criar as páginas Web referente ao Curso dentro da pasta Curso. newCurso.jsp <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>New Curso</title> </head> <body> <div class="line-separator"></div> <div style="text-align:center"> <h1 class="title">New Curso</h1> </div> <div class="line-separator"></div> <br> <h:form> <h:panelGrid columns="2" styleClass="table"> <h:outputText value="nome"/> <h:inputText required="true" label="nome" value="#{CursoManagedBean.curso.nome}"/> <h:outputText value="nomeDepartamento"/> <h:inputText required="true" label="nomeDepartamento" value="#{CursoManagedBean.curso.nomeDepartamento} "/> <h:outputText value="cargaHoraria"/> <h:inputText label="cargaHoraria" value="#{CursoManagedBean.curso.cargaHoraria} "/> </h:panelGrid> <br> <h:messages errorClass="error"></h:messages> <div style="text-align:center"> <h:commandButton value="Save" action="#{CursoManagedBean.newCurso}" styleClass="save"/> <h:commandButton value="Cancel" immediate="true" action="listCurso" styleClass="cancel"/> </div> </h:form> </body> </html> </f:view> editCurso.jsp <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>Edit Curso</title> </head> <body> <div class="line-separator"></div> <div style="text-align:center"> <h1 class="title">Edit Curso</h1> </div> <div class="line-separator"></div> <br> <h:form> <table class="table"> <h:inputHidden value="#{CursoManagedBean.curso.id}"/> <tr> <td>nome</td> <td> <h:inputText required="true" label="nome" value="#{CursoManagedBean.curso.nome}"/> </td> </tr> <tr> <td>nomeDepartamento</td> <td> <h:inputText required="true" label="nomeDepartamento" value="#{CursoManagedBean.curso.nomeDepartamento} "/> </td> </tr> <tr> <td>cargaHoraria</td> <td> <h:inputText label="cargaHoraria" value="#{CursoManagedBean.curso.cargaHoraria} "/> </td> </tr> </table> <br> <h:messages errorClass="error"></h:messages> <div style="text-align:center"> <h:commandButton value="Save" action="#{CursoManagedBean.editCurso}" styleClass="save"/> <h:commandButton value="Cancel" immediate="true" action="listCurso" styleClass="cancel"/> </div> </h:form> </body> </html> </f:view> listCurso.jsp <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>List of Curso</title> </head> <body> <div class="line-separator"></div> <div style="text-align:center"> <h1 class="title">List of Curso</h1> </div> <div class="line-separator"></div> <br> <h:form> <h:dataTable value="#{CursoManagedBean.listaCursos} " var="item" styleClass="list_table" headerClass="header" rowClasses="row1,row2"> <h:column> <f:facet name="header" > <h:outputText value="id"/> </f:facet> <h:outputText value="#{item.id}"/> </h:column> <h:column> <f:facet name="header" > <h:outputText value="nome"/> </f:facet> <h:outputText value="#{item.nome}"/> </h:column> <h:column> <f:facet name="header" > <h:outputText value="nomeDepartamento"/> </f:facet> <h:outputText value="#{item.nomeDepartamento}"/> </h:column> <h:column> <f:facet name="header" > <h:outputText value="cargaHoraria"/> </f:facet> <h:outputText value="#{item.cargaHoraria}"/> </h:column> <h:column> <f:facet name="header" > <h:outputText value="Editar"/> </f:facet> <h:commandLink value="editar" type="submit" action="editCurso" actionListener="#{CursoManagedBean.findCurso}" > <f:attribute name="codCurso" value="#{item.id}"/> </h:commandLink> </h:column> <h:column> <f:facet name="header" > <h:outputText value="Remover"/> </f:facet> <h:commandLink value="remover" type="submit" actionListener="#{CursoManagedBean.removeCurso}" > <f:attribute name="codCurso" value="#{item.id}"/> </h:commandLink> </h:column> </h:dataTable> <br> <div style="text-align:center"> <h:commandButton value="Back to Index" immediate="true" action="index" styleClass="button"/> <h:commandButton value="New Curso" immediate="true" action="newCurso" styleClass="button"/> </div> </h:form> </body> </html> </f:view> 15) Vamos criar as páginas Web referente a Disciplina dentro da pasta Disciplina. newDisciplina.jsp <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>New Disciplina</title> </head> <body> <div class="line-separator"></div> <div style="text-align:center"> <h1 class="title">New Disciplina</h1> </div> <div class="line-separator"></div> <br> <h:form> <h:panelGrid columns="2" styleClass="table"> <h:outputText value="nome"/> <h:inputText required="true" label="nome" value="#{DisciplinaManagedBean.disciplina.nome} "/> <h:outputText value="quantidadeCreditos"/> <h:inputText label="quantidadeCreditos" value="#{DisciplinaManagedBean.disciplina.quantidadeCreditos} "/> <h:outputText value="nomeProfessor"/> <h:inputText label="nomeProfessor" value="#{DisciplinaManagedBean.disciplina.nomeProfessor} "/> <h:outputText value="curso"/> <h:selectOneMenu required="true" label="curso" value="#{DisciplinaManagedBean.disciplina.curso}"> <f:selectItems value="#{CursoManagedBean.cursos}" /> <f:converter converterId="CursoConverter"/> </h:selectOneMenu> </h:panelGrid> <br> <h:messages errorClass="error"></h:messages> <div style="text-align:center"> <h:commandButton value="Save" action="#{DisciplinaManagedBean.newDisciplina}" styleClass="save"/> <h:commandButton value="Cancel" immediate="true" action="listDisciplina" styleClass="cancel"/> </div> </h:form> </body> </html> </f:view> editDisciplina.jsp <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>Edit Disciplina</title> </head> <body> <div class="line-separator"></div> <div style="text-align:center"> <h1 class="title">Edit Disciplina</h1> </div> <div class="line-separator"></div> <br> <h:form> <table class="table"> <h:inputHidden value="#{DisciplinaManagedBean.disciplina.id} "/> <tr> <td>nome</td> <td> <h:inputText required="true" label="nome" value="#{DisciplinaManagedBean.disciplina.nome} "/> </td> </tr> <tr> <td>quantidadeCreditos</td> <td> <h:inputText label="quantidadeCreditos" value="#{DisciplinaManagedBean.disciplina.quantidadeCreditos}"/> </td> </tr> <tr> <td>nomeProfessor</td> <td> <h:inputText label="nomeProfessor" value="#{DisciplinaManagedBean.disciplina.nomeProfessor} "/> </td> </tr> <tr> <td>curso</td> <td> <h:selectOneMenu required="true" label="curso" value="#{DisciplinaManagedBean.disciplina.curso}"> <f:selectItems value="#{CursoManagedBean.cursos}" /> <f:converter converterId="CursoConverter"/> </h:selectOneMenu> </td> </tr> </table> <br> <h:messages errorClass="error"></h:messages> <div style="text-align:center"> <h:commandButton value="Save" action="#{DisciplinaManagedBean.editDisciplina} " styleClass="save"/> <h:commandButton value="Cancel" immediate="true" action="listDisciplina" styleClass="cancel"/> </div> </h:form> </body> </html> </f:view> listDisciplina.jsp <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>List of Disciplina</title> </head> <body> <div class="line-separator"></div> <div style="text-align:center"> <h1 class="title">List of Disciplina</h1> </div> <div class="line-separator"></div> <br> <h:form> <h:dataTable value="#{DisciplinaManagedBean.listaDisciplinas}" var="item" styleClass="list_table" headerClass="header" rowClasses="row1,row2"> <h:column> <f:facet name="header" > <h:outputText value="id"/> </f:facet> <h:outputText value="#{item.id}"/> </h:column> <h:column> <f:facet name="header" > <h:outputText value="nome"/> </f:facet> <h:outputText value="#{item.nome}"/> </h:column> <h:column> <f:facet name="header" > <h:outputText value="quantidadeCreditos"/> </f:facet> <h:outputText value="#{item.quantidadeCreditos}"/> </h:column> <h:column> <f:facet name="header" > <h:outputText value="nomeProfessor"/> </f:facet> <h:outputText value="#{item.nomeProfessor}"/> </h:column> <h:column> <f:facet name="header" > <h:outputText value="curso"/> </f:facet> <h:outputText value="#{item.curso}"> <f:converter converterId="CursoConverter"/> </h:outputText> </h:column> <h:column> <f:facet name="header" > <h:outputText value="Editar"/> </f:facet> <h:commandLink value="editar" type="submit" action="editDisciplina" actionListener="#{DisciplinaManagedBean.findDisciplina}" > <f:attribute name="codDisciplina" value="#{item.id}"/> </h:commandLink> </h:column> <h:column> <f:facet name="header" > <h:outputText value="Remover"/> </f:facet> <h:commandLink value="remover" type="submit" actionListener="#{DisciplinaManagedBean.removeDisciplina} " > <f:attribute name="codDisciplina" value="#{item.id}"/> </h:commandLink> </h:column> </h:dataTable> <br> <div style="text-align:center"> <h:commandButton value="Back to Index" immediate="true" action="index" styleClass="button"/> <h:commandButton value="New Disciplina" immediate="true" action="newDisciplina" styleClass="button"/> </div> </h:form> </body> </html> </f:view> 16) Vamos criar a página Web de index dentro da pasta WebContent. index.jsp <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>index</title> </head> <body> <div class="line-separator"></div> <div style="text-align:center"> <h1 class="title">CRUD</h1> </div> <div class="line-separator"></div> <br> <h:form> <h:panelGrid styleClass="list_table" rowClasses="row1,row2"> <h:commandLink value="Disciplina" action="listDisciplina"/> <h:commandLink value="Pessoa" action="listPessoa"/> <h:commandLink value="Aluno" action="listAluno"/> <h:commandLink value="Curso" action="listCurso"/> </h:panelGrid> </h:form> </body> </html> </f:view> 17) Vamos adicionar as regras de navegação no arquivo faces-config.xml que está na pasta WebContent/WEB-INF. O código final do arquivo segue abaixo: faces-config.xml <?xml version='1.0' encoding='UTF-8'?> <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/webfacesconfig_2_0.xsd"> <converter> <converter-id>CursoConverter</converter-id> <converter-class>converters.CursoConverter</converter-class> </converter> <navigation-rule> <from-view-id>*</from-view-id> <navigation-case> <from-outcome>newDisciplina</from-outcome> <to-view-id>/Disciplina/newDisciplina.jsp</to-view-id> <redirect/> </navigation-case> <navigation-case> <from-outcome>editDisciplina</from-outcome> <to-view-id>/Disciplina/editDisciplina.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>listDisciplina</from-outcome> <to-view-id>/Disciplina/listDisciplina.jsp</to-view-id> <redirect/> </navigation-case> <navigation-case> <from-outcome>index</from-outcome> <to-view-id>/index.jsp</to-view-id> <redirect/> </navigation-case> </navigation-rule> <navigation-rule> <from-view-id>/Disciplina/newDisciplina.jsp</from-view-id> <navigation-case> <from-outcome>newSuccess</from-outcome> <to-view-id>/Disciplina/listDisciplina.jsp</to-view-id> <redirect/> </navigation-case> </navigation-rule> <navigation-rule> <from-view-id>/Disciplina/editDisciplina.jsp</from-view-id> <navigation-case> <from-outcome>editSuccess</from-outcome> <to-view-id>/Disciplina/listDisciplina.jsp</to-view-id> <redirect/> </navigation-case> </navigation-rule> <navigation-rule> <from-view-id>*</from-view-id> <navigation-case> <from-outcome>newPessoa</from-outcome> <to-view-id>/Pessoa/newPessoa.jsp</to-view-id> <redirect/> </navigation-case> <navigation-case> <from-outcome>editPessoa</from-outcome> <to-view-id>/Pessoa/editPessoa.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>listPessoa</from-outcome> <to-view-id>/Pessoa/listPessoa.jsp</to-view-id> <redirect/> </navigation-case> <navigation-case> <from-outcome>index</from-outcome> <to-view-id>/index.jsp</to-view-id> <redirect/> </navigation-case> </navigation-rule> <navigation-rule> <from-view-id>/Pessoa/newPessoa.jsp</from-view-id> <navigation-case> <from-outcome>newSuccess</from-outcome> <to-view-id>/Pessoa/listPessoa.jsp</to-view-id> <redirect/> </navigation-case> </navigation-rule> <navigation-rule> <from-view-id>/Pessoa/editPessoa.jsp</from-view-id> <navigation-case> <from-outcome>editSuccess</from-outcome> <to-view-id>/Pessoa/listPessoa.jsp</to-view-id> <redirect/> </navigation-case> </navigation-rule> <navigation-rule> <from-view-id>*</from-view-id> <navigation-case> <from-outcome>newAluno</from-outcome> <to-view-id>/Aluno/newAluno.jsp</to-view-id> <redirect/> </navigation-case> <navigation-case> <from-outcome>editAluno</from-outcome> <to-view-id>/Aluno/editAluno.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>listAluno</from-outcome> <to-view-id>/Aluno/listAluno.jsp</to-view-id> <redirect/> </navigation-case> <navigation-case> <from-outcome>index</from-outcome> <to-view-id>/index.jsp</to-view-id> <redirect/> </navigation-case> </navigation-rule> <navigation-rule> <from-view-id>/Aluno/newAluno.jsp</from-view-id> <navigation-case> <from-outcome>newSuccess</from-outcome> <to-view-id>/Aluno/listAluno.jsp</to-view-id> <redirect/> </navigation-case> </navigation-rule> <navigation-rule> <from-view-id>/Aluno/editAluno.jsp</from-view-id> <navigation-case> <from-outcome>editSuccess</from-outcome> <to-view-id>/Aluno/listAluno.jsp</to-view-id> <redirect/> </navigation-case> </navigation-rule> <navigation-rule> <from-view-id>*</from-view-id> <navigation-case> <from-outcome>newCurso</from-outcome> <to-view-id>/Curso/newCurso.jsp</to-view-id> <redirect/> </navigation-case> <navigation-case> <from-outcome>editCurso</from-outcome> <to-view-id>/Curso/editCurso.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>listCurso</from-outcome> <to-view-id>/Curso/listCurso.jsp</to-view-id> <redirect/> </navigation-case> <navigation-case> <from-outcome>index</from-outcome> <to-view-id>/index.jsp</to-view-id> <redirect/> </navigation-case> </navigation-rule> <navigation-rule> <from-view-id>/Curso/newCurso.jsp</from-view-id> <navigation-case> <from-outcome>newSuccess</from-outcome> <to-view-id>/Curso/listCurso.jsp</to-view-id> <redirect/> </navigation-case> </navigation-rule> <navigation-rule> <from-view-id>/Curso/editCurso.jsp</from-view-id> <navigation-case> <from-outcome>editSuccess</from-outcome> <to-view-id>/Curso/listCurso.jsp</to-view-id> <redirect/> </navigation-case> </navigation-rule> </faces-config>