corner imagecorner image
FeaturesPluginsDocs & SupportCommunityPartners

Gerando um aplicativo CRUD do JavaServer Faces a partir de um banco de dados

Neste tutorial, você usa o NetBeans IDE para gerar e implantar uma aplicação Web que exibe dados a partir de um banco de dados. O tutorial demonstra como gerar uma aplicação Web com a funcionalidade CRUD (criar, ler, atualizar e excluir) que usa a API de persistência Java (JPA) para gerenciar a transação do banco de dados. No tutorial, você primeiro cria classes de entidade baseadas em tabelas em um banco de dados e, em seguida, cria páginas JavaServer Faces (JSF) a partir de classes de entidade usando o assistente para Páginas JSF de classes de entidade.

O assistente para Páginas JSF de classes de entidade permite que você gere páginas JSF de forma rápida e fácil para trabalhar com um banco de dados baseado nas classes de entidade do seu projeto. O assistente também lhe dá a opção de ativar a funcionalidade Ajax nas páginas JSF geradas. O código gerado pelo assistente possui os seguintes recursos:

  • O código é fácil de manter e personalizar.
  • Manipula todos os tipos de relação, IDs gerados e não-gerados, e IDs incorporados, incluindo os campos ID incorporados que correspondem às colunas de chave estrangeira
  • Campos ID incorporados são mostrados como somente leitura onde apropriado
  • Inclui verificações obrigatórios para evitar violações de coluna não-nula e verificações órfãs para evitar violações de coluna não-nula em entidades relacionadas. O assistente incluirá elementos de anotação nullable ou optional nas classes de entidade.
  • Inclui verificações para checar se a entidade atual está correta a fim de evitar erros, se um usuário desviar do fluxo de página normal (por exemplo, ao trabalhar em várias abas do navegador)
  • Evita código por propriedade em determinados arquivos caso você precise mais tarde modificar o esquema do seu banco de dados
  • Os campos podem ser removidos facilmente das JSPs geradas para simplificar a personalização
  • Manipulação elegante de situações quando um usuário tenta operar em uma entidade que foi excluída por outro usuário ou tenta criar uma entidade que já existe.
  • As páginas podem ser estilizadas facilmente

Além de gerar páginas JSF para você, o assistente para Páginas JSF de classes de entidade incorpora a funcionalidade do assistente para Classes de controlador JPA de classes de entidade. Se você deseja criar classes de controlador JPA para classes de entidade, mas não deseja que as páginas JSF sejam geradas, use o assistente para Classes de controlador JPA de classes de entidade em vez do assistente para Páginas JSF de classes de entidade.

Observação: Este tutorial usa o NetBeans IDE 6.5. Se você estiver usando o NetBeans IDE 6.1, consulte Gerando um aplicativo CRUD do JavaServer Faces a partir de um banco de dados no NetBeans IDE 6.1.

Conteúdo

O conteúdo desta página se aplica ao NetBeans IDE 6.5

Para seguir este tutorial, você precisa dos seguintes recursos e softwares.

Software ou recurso Versão necessária
NetBeans IDE 6.5 Java
Java Development Kit (JDK) Versão 6 ou versão 5
Servidor da aplicação GlassFish V2
Banco de dados Consulting Agency baixar SQL

Observação. O servidor da aplicação GlassFish é incluído no download do NetBeans.

Criando o banco de dados

Este tutorial usa um banco de dados de agência de consultoria chamado consult. O banco de dados não está incluído quando você instala o IDE, portanto, você precisa primeiro criar o banco de dados para seguir este tutorial.

O banco de dados consult foi criado para demonstrar o escopo do suporte do IDE para manipular uma variedade de estruturas de banco de dados. Portanto, o banco de dados não é um exemplo de design de banco de dados recomendado. Em vez disso, ele tenta incorporar muitos recursos relevantes encontrados em um design de banco de dados. Por exemplo, o banco de dados consult contém todos os tipos de relacionamento possíveis, chaves primárias compostas e muitos tipos de dados diferentes. Consulte as tabelas para obter uma visão geral mais detalhada da estrutura do banco de dados.

Observação. Este tutorial usa o servidor de banco de dados JavaDB, mas você também pode completar o tutorial usando o servidor de banco de dados MySQL. Para criar o banco de dados em MySQL, baixe e extraia o arquivo mysql-consult.zip. Para obter mais informações sobre a configuração do IDE para trabalhar com MySQL, consulte o tutorial Conectando a um banco de dados MySQL.

  1. Baixe derby-consult.zip e extraia o arquivo para o seu sistema.

    Quando extrair o arquivo, você verá dois scripts SQL: derby_create_consult.sql e derby_insert_data_consult.sql.

  2. Na janela Serviços, expanda o nó Bancos de dados, clique com o botão direito do mouse no nó JavaDB nó e escolha Iniciar servidor.
  3. Clique com o botão direito do mouse no nó Java DB e escolha Criar banco de dados.
  4. Digite consult como o Nome do banco de dados, Nome de usuário e Senha na caixa de diálogo Criar Java DB. Clique em OK.
    Caixa de diálogo Criar novo banco de dados

    Um novo nó aparece sob o nó Bancos de dados (jdbc:derby://localhost:1527/consult [consult on CONSULT]).

  5. Clique com o botão direito do mouse no novo nó e escolha Conectar.
  6. Escolha Arquivo > Abrir arquivo no menu principal e navegue para o arquivo extraído derby_create_consult.sql. Clique em Abrir.

    O arquivo se abre automaticamente no editor SQL.

  7. Verifique se o banco de dados consult está selecionado na lista suspensa Conexão na barra de ferramentas do editor SQL e clique no botão Executar SQL.
captura de tela do editor SQL

Quando você clica em Executar SQL, a saída seguinte aparece na janela Saída.

captura de tela da janela Saída

Visualizando a estrutura do banco de dados

Para ver se as tabelas foram criadas corretamente, expanda o nó Tabelas sob o nó da conexão do banco de dados. Você pode expandir um nó da tabela para ver as colunas, índices e quaisquer chaves estrangeiras da tabela. Você pode clicar com o botão direito do mouse em uma coluna e escolher Propriedades para visualizar informações adicionais sobre a coluna.

captura de tela da janela Serviços

Se você não vir quaisquer tabelas sob o nó Tabelas, clique com o botão direito do mouse no nó Tabelas e escolha Atualizar.

Se você observar a estrutura do banco de dados consult, verá que o banco de dados contém tabelas que possuem uma variedade de relacionamentos e vários tipos de campo. Ao criar classes de entidade a partir de um banco de dados, o IDE gera automaticamente o código apropriado para os vários tipos de campo.

diagrama do banco de dados consult

A tabela seguinte descreve as tabelas encontradas no banco de dados consult.

Tabela de banco de dados Descrição Recursos de design
CLIENT Um cliente da agência de consultoriaChave primária composta, não-gerada (cujos campos não constituem uma chave estrangeira)
CONSULTANT Um funcionário da agência de consultoria que os clientes podem contratar Inclui um campo de retomada do tipo LONG VARCHAR
CONSULTANT_STATUS O status de um consultor na agência de consultoria (por exemplo, Ativo e Inativo são status possíveis) Chave primária não-gerada do tipo CHAR
RECRUITER Um funcionário da agência de consultoria responsável por conectar clientes e consultores  
PROJECT Um projeto que um cliente possui com os consultores da agência de consultoria Chave primária composta, não-gerada que inclui dois campos constituindo uma chave estrangeira para a tabela CLIENT
BILLABLE Um conjunto de horas trabalhadas por um consultor em um projeto, o qual a agência de consultoria cobra do cliente relevante Inclui um campo de artefato do tipo CLOB
ADDRESS O endereço de cobrança de um cliente  
PROJECT_CONSULTANT Tabela unida indicando quais consultores estão atribuídos no momento a determinados projetos Faz referência cruzada entre PROJECT e CONSULTANT, a primeira possui uma chave primária composta

O banco de dados consult inclui uma variedade de relacionamentos. Ao criar classes de entidade a partir de um banco de dados, o IDE gera automaticamente o código apropriado para os relacionamentos da tabela, adicionando as anotações apropriadas aos campos nas classes de entidade. A tabela seguinte descreve os relacionamentos de tabela encontrados no banco de dados consult. (Os relacionamentos inversos não são mostrados.)

Tabela de banco de dados Tabela relacionada Informações sobre relacionamento Descrição
CLIENT RECRUITER nulo um para um com edição manual; nulo um para muitos caso não seja editado CLIENT possui muitos RECRUITERs e RECRUITER possui zero ou um CLIENT
CLIENT ADDRESS não-nulo um para um CLIENT possui um ADDRESS e ADDRESS possui zero ou um CLIENT
CLIENT PROJECT não-nulo um para muitos; em uma entidade de projeto, o valor do campo do cliente é parte da chave primária do projeto CLIENT possui (pode ser atribuído a) muitos PROJECTS e PROJECT possui um CLIENT
CONSULTANT BILLABLE não nulo um para muitos CONSULTANT possui muitos BILLABLEs e BILLABLE possui um CONSULTANT
CONSULTANT CONSULTANT_STATUS não-nulo um para muitos CONSULTANT possui um CONSULTANT_STATUS e CONSULTANT_STATUS possui (pode ser atribuído a) muitos CONSULTANTS.
CONSULTANT RECRUITER nulo um para muitos CONSULTANT possui zero ou um RECRUITER e RECRUITER possui muitos CONSULTANTs
BILLABLE PROJECT não-nulo um para muitos BILLABLE possui um PROJECT e PROJECT possui muitos BILLABLES
PROJECT_CONSULTANT CONSULTANT não-nulo um para muitos PROJECT_CONSULTANT possui um CONSULTANT e COSULTANT possui (pode ser atribuído a) muitos PROJECT_CONSULTANTs
PROJECT_CONSULTANT PROJECT um para muitos PROJECT_CONSULTANT possui um PROJECT e PROJECT possui muitos PROJECT_CONSULTANTs

Agora que o banco de dados está criado, você pode criar a aplicação Web e usar o assistente para Classes de entidade do banco de dados com base nas tabelas do banco de dados.

Criando o projeto de aplicação Web

Neste exercício, você cria um projeto Web e adiciona o framework JavaServer Faces ao projeto. Quando você criar o projeto, irá selecionar JavaServer Faces no painel Frameworks do assistente para Novo projeto.

  1. Escolha Arquivo > Novo projeto (Ctrl-Shift-N).
  2. Na categoria Java Web, selecione Aplicação Web. Clique em Próximo.
  3. Digite ConsultingAgency para o nome do projeto e defina a localização do projeto.
  4. Desmarque a opção Usar pasta dedicada, se ela estiver selecionada.
    Para este tutorial, não há motivo para copiar as bibliotecas do projeto para uma pasta dedicada porque você não precisará compartilhar bibliotecas com outros usuários.
    Clique em Próximo.
  5. Defina o servidor como GlassFish e defina a versão de Java EE Java EE 5. Clique em Próximo.
  6. Marque a caixa de verificação JavaServer Faces no painel Frameworks. Clique em Terminar.

    Observação: Ao selecionar o framework, selecione o framework JavaServer Faces, NÃO Visual Web JavaServer Faces.

Quando você clicar em Terminar, o IDE criará o projeto de aplicação Web e abrirá welcomeJSF.jsp no editor. Você pode fechar welcomeJSF.jsp porque não precisará editar esse arquivo.

Gerando as classes de entidade do banco de dados

Depois que você criar o banco de dados e a conexão do banco de dados for registrada no IDE, use o assistente para Classes de entidade do banco de dados para gerar rapidamente as classes de entidade com base nas tabelas do banco de dados. O IDE pode gerar classes de entidade para cada tabela que você selecionar, e também pode gerar quaisquer classes de entidade necessárias para tabelas relacionadas.

  1. Na janela Projetos, clique com o botão direito do mouse no ConsultingAgency e escolha Novo > Classes de entidade do banco de dados.
  2. Selecione Nova fonte de dados na lista suspensa Fonte de dados para abrir a caixa de diálogo Criar fonte de dados.
  3. Digite jdbc/consult como o Nome JNDI e selecione jdbc:derby://localhost:1527/consult [consult on CONSULT] como a Conexão do banco de dados. Clique em OK para fechar a caixa de diálogo e retornar ao assistente.
    Caixa de diálogo Criar fonte de dados

    As tabelas no banco de dados consult aparecem na caixa de listagem Tabelas disponíveis.

  4. Clique em Adicionar tudo no assistente. Clique em Próximo.
    Assistente para Novas entidades do banco de dados
  5. Digite jpa.entities como o Pacote. Verifique se a caixa de verificação para gerar as consultas nomeadas está marcada.
  6. Clique em Criar unidade de persistência para abrir a caixa de diálogo Criar unidade de persistência. Clique em Criar na caixa de diálogo para criar a unidade de persistência e retornar ao assistente.

    Você pode manter os valores padrão para a unidade de persistência.

    Assistente para Novas entidades do banco de dados
  7. Clique em Próximo.
  8. Mantenha os valores padrão na página Opções de mapeamento do assistente. Clique em Terminar.

    Você pode usar a página Opções de mapeamento do assistente, se quiser personalizar mais as anotações ou o tipo de coleção nas entidades geradas. Para este tutorial, os valores padrão são suficientes.

Ao usar o assistente para criar classes de entidade de um banco de dados, o IDE examina os relacionamentos entre as tabelas. Na janela Projetos, se você expandir o nó Pacote de códigos-fonte jpa.entities, poderá ver que o IDE gerou uma classe de entidade para cada tabela exceto para a tabela PROJECT_CONSULTANT. O IDE não criou uma classe de entidade para PROJECT_CONSULTANT porque a tabela é uma tabela unidade.

O IDE também gerou duas classes adicionais para as tabelas com chaves primárias compostas: CLIENT e PROJECT. As classes de chave primária dessas tabelas (ClientPK.java e ProjectPK.java) possuem PK anexado ao nome.

captura de tela da janela Projetos

Se você observar o código gerado para as classes de entidade, poderá ver que o assistente adicionou anotações @GeneratedValue aos campos ID e elementos da anotação @Basic(optional = "false") a alguns dos campos das classes de entidade. Com base nos elementos da anotação @Basic(optional = "false"), o assistente para Páginas JSF de classes de entidade pode gerar o código que inclui verificações para evitar violações da coluna não nulo para esses campos.

Editando as classes de entidade

Se desejar, você agora pode editar as classes de entidade geradas. Neste exercício, você modificará as implementações do método toString nas classes de entidade. Na classes Client e Recruiter você também modificará as anotações para alterar o relacionamento entre clientes e recrutadores de um para muitos para um para um. Como já existe um relacionamento nulo um para muitos entre recrutadores e consultores, para fins demonstrativos neste tutorial, você estabelecerá um relacionamento nulo um para um entre clientes e recrutadores.

Observação. Esta seção do tutorial é opcional e você não precisa fazer quaisquer alterações nas classes de entidade antes de gerar as páginas JSF com o assistente para Páginas JSF de classes de entidade.

Editando Address.java

Abra a classe de entidade Address faça as alterações seguintes.

  1. Modifique a instrução de retorno do método toString para retornar o endereço completo.
    return line1 + ", " + line2 + ", " + city + ", " + region + ", " + country + ", " + postalCode;

    Você pode usar o auto-completar de código do IDE para ajudá-lo a adicionar os campos.

    captura de tela de auto-completar para campos
  2. Corrija suas importações, se necessário, e salve suas alterações.

Editando Billable.java

Abra a classe de entidade Billable e faça as seguintes alterações.

  1. Modifique a instrução de retorno do método toString para retornar à descrição, id do consultor e projeto:
    public String toString() {
            return description + ", " + consultantId + ", " + project;
  2. Corrija suas importações, se necessário, e salve suas alterações.

Editando Client.java

  1. Modifique a anotação @OneToMany no campo recruiterCollection para tornar o relacionamento um para um e alterar o campo de uma coleção para Recruiter recruiter.
    @OneToOne(mappedBy = "client")
    private Recruiter recruiter;
  2. Modifique os getters e setters de Collection<Recruiter> recruiterCollection de acordo com as alterações no nome do campo. O novo getter e setter terá a seguinte aparência:
    public Recruiter getRecruiter() {
        return recruiter;
    }
    
    public void setRecruiter(Recruiter recruiter) {
        this.recruiter = recruiter;
    }

    Talvez seja mais simples excluir o getter e setter de Collection<Recruiter> recruiterCollection e gerar um novo getter e setter para Recruiter recruiter usando a caixa de diálogo Inserir código. Para criar um novo getter e setter, clique com o botão direito do mouse no código-fonte e escolha Inserir código (Alt-Insert) e selecione Getter e Setter. Selecione recruiter na caixa de diálogo Gerar getter e setter e clique em Gerar.

    Caixa de diálogo Gerar getters e setters
  3. Modifique a instrução de retorno do método toString para retornar String.valueOf(clientPK).
    public String toString() {
        return String.valueOf(clientPK);
    }
  4. Corrija suas importações, se necessário, e salve suas alterações.

Editando ClientPK.java

  1. Modifique a instrução de retorno do método toString para retornar o nome do cliente e o número do departamento.
    public String toString() {
        return clientName + ", " + "Dept. " + clientDepartmentNumber;
    }
  2. Corrija suas importações, se necessário, e salve suas alterações.

Editando Consultant.java

  1. Modifique a instrução de retorno do método toString para retornar ao email.
    public String toString() {
        return email;
    }
  2. Corrija suas importações, se necessário, e salve suas alterações.

Editando ConsultantStatus.java

  1. Modifique a instrução de retorno do método toString para retornar o ID do status e a descrição.
    public String toString() {
        return statusId + ", " + description;
    }
  2. Corrija suas importações, se necessário, e salve suas alterações.

Editando Project

  1. Modifique a instrução de retorno do método toString para retornar o seguinte:
    public String toString() {
        return (projectPK == null ? "(unnamed project)" : projectPK.getProjectName()) + ", " + client;
    }
  2. Corrija suas importações, se necessário, e salve suas alterações.

Editando Recruiter.java

  1. Modifique a anotação @ManyToOne no campo client para tornar o relacionamento um para um.
    @OneToOne
    private Client client;
  2. Modifique a instrução de retorno do método toString para retornar o email.
    public String toString() {
        return email;
    }
  3. Corrija suas importações, se necessário, e salve suas alterações.

Gerando páginas JSF de classes de entidade

Agora que as classes de entidade estão criadas, você pode criar a interface Web para exibir e modificar os dados. Você usará o assistente para Páginas JSF de classes de entidade para gerar páginas JavaServer Faces. O código gerado pelo assistente inclui verificações baseadas nas anotações das classes de entidade. O assistente também lhe dá a opção de ativar a funcionalidade Ajax no aplicativo, estendendo a tecnologia JavaServer Faces com a tecnologia Dynamic Faces.

Para cada classe de entidade o assistente gera o seguinte:

  • uma classe de controlador JPA
  • uma classe de controlador JSF
  • uma classe de conversor JSF
  • um diretório contendo quatro arquivos JSP (Detail.jsp, Edit.jsp, List.jsp, New.jsp)
  • elementos de bean gerenciado, elementos de conversor e regras de navegação para a classe em faces-config.xml

O assistente também gera classes seguintes usadas pelas classes do controlador:

  • classes de exceção usadas pelos controladores JPA
  • classes de utilitário usadas pelos controladores JSF

Para gerar as páginas JSF:

  1. Clique com o botão direito do mouse no nó do projeto na janela Projetos e escolha Novo > Páginas JSF de classes de entidade para abrir o assistente para Novas páginas JSF de classes de entidade.

    O painel Tabelas disponíveis do assistente lista as sete classes de entidade do projeto. O assistente não lista as classes incorporadas (ClientPK.java e ProjectPK.java)

  2. Clique em Adicionar tudo para mover todas as classes para o painel Classes de entidade selecionadas do assistente. Clique em Próximo.
    Assistente para Novas páginas JSF de classes de entidade
  3. Digite jpa.controllers para o pacote do controlador JPA.
  4. Digite jsf para o pacote de classes JSF.
  5. Selecione Habilitar com Ajax páginas geradas.
  6. Clique em Terminar.

Quando você clica em Terminar, o IDE cria as classes do controlador JPA da classe de entidade no pacote jpa.controllers e o conversor JSF e as classes do controlador JSF no pacote jsf. Cada classe do controlador manipula as operações da classe de entidade correspondente, incluindo a criação, edição e destruição de instâncias da classe de entidade por meio da API de persistência Java. Cada classe do conversor JSF implementa a interface javax.faces.convert.Converter definida pelo JavaServer Faces e converte as instâncias da classe de entidade correspondente para objetos String e vice-versa. Cada classe do controlador JSF é específica para a JSP gerada correspondente e inclui o código que chama os métodos nas classes do controlador JPA e demonstra quais exceções a serem interceptadas.

Em geral, ao modificar seu aplicativo, você desejará modificar a lógica do controlador nas classes do controlador JSF e usar o código gerado como um exemplo.

Se expandir o nó Páginas da Web, você poderá ver que o IDE gerou uma pasta de cada uma das classes de entidade. Cada pasta contém os arquivos Detail.jsp, Edit.jsp, List.jsp e New.jsp. O IDE também modificou welcomeJSF.jsp , inserindo links em cada uma das páginas List.jsp.

captura de tela do diretório Páginas da Web na janela Projetos

Se você expandir o nó Pacotes de códigos-fonte, poderá ver as classes de controlador, de conversor, de exceção e de utilitário que o assistente gerou.

captura de tela do diretório Pacotes de código-fonte na janela Projetos

Se expandir o nó Arquivos de configuração e abrir faces-config.xml no editor XML, você poderá ver que o IDE inseriu o bean gerenciado e os elementos de conversor de cada controlador e classes de conversor. O IDE também inseriu um elemento de regra de navegação de cada JSP, indicando o resultado lógico que faz com que o aplicativo navegue para esse JSP.

Sobre a ativação do Ajax no aplicativo

O painel final do assistente para Páginas JSF de classes de entidade lhe dá a opção de selecionar Ativar com Ajax páginas geradas para ativar a funcionalidade Ajax no aplicativo através da extensão Dynamic Faces para o framework JSF. O assistente adiciona as bibliotecas de extensões JSF obrigatórias ao projeto e configura o descritor de deployment do aplicativo para ativar o ciclo de vida do Ajax. Para saber mais sobre as extensões JSF do Dynamic Faces, consulte o site de extensões de tecnologia do JavaServer Faces.

Assistente para Novas páginas JSF de classes de entidade

Se você selecionar a opção, o assistente realiza as seguintes ações.

  • Adiciona bibliotecas de extensões JSF ao projeto (jsf-extensions-common, jsf-extensions-dynamic-faces, commons-logging e shale-remoting) que são necessárias para o uso da tecnologia Dynamic Faces no projeto.
    captura de tela do nó Bibliotecas na janela Projetos
  • Modifica web.xml para configurar o FacesServlet para usar o ciclo de vida do Ajax, adicionando uma entrada do parâmetro de inicialização javax.faces.LIFECYCLE_ID e configurando o valor para com.sun.faces.lifecycle.PARTIAL.
    captura de tela do editor web.xml
  • Gera o arquivo de fragmento JSP AjaxScripts.jspf no diretório WEB-INF/jspf. AjaxScripts.jspf renderiza arquivos JavaScript contidos nas bibliotecas do Dynamic Faces.

O aplicativo contém um arquivo JavaScript jsfcrud.js no diretório Páginas da Web. O arquivo jsfcrud.js verifica se o Dynamic Faces está ativado, ao checar se os arquivos JavaScript do Dynamic Faces foram renderizados. Se o Dynamic Faces estiver ativado, o formulário será configurado para enviar solicitações do Ajax.

Depois de ativar o Ajax no aplicativo com extensões do Dynamic Faces, você pode modificar o aplicativo para adicionar mais funcionalidade fornecida pelas extensões do Dynamic Faces.

Gerando classes de controlador JPA a partir de classes de entidade

Na aplicação Web gerada, os métodos do controlador JPA são acessados pelos métodos da classe do controlador JSF. Quando você usa o assistente para Páginas JSF de classes de entidade, o IDE gera automaticamente as classes do controlador JPA de cada uma das entidades selecionadas. Mas o uso de classes do controlador JPA não está restrito a aplicações Web JSF. Você pode usar as classes do controlador JPA em outros aplicativos que usem a API de persistência Java (por exemplo, em aplicativos de área de trabalho) para trabalhar com classes de entidade e gerenciar a persistência da entidade.

O assistente para Classes do controlador JPA de classes de entidade permite que você crie facilmente as classes do controlador JPA nos projetos. Para criar as classes do controlador JPA, abra o assistente para Novo arquivo e escolha Classes do controlador JPA de classes de entidade na categoria Persistência. No assistente, você especifica as classes de entidade para as quais deseja criar as classes do controlador JPA e determina onde deseja que o IDE crie os arquivos. O assistente também cria automaticamente as classes de exceção usadas pelas classes do controlador JPA.

captura de tela do assistente para Classes do controlador JPA

Depois de gerar os controladores JPA, você pode acessar os métodos do controlador a partir de outros arquivos. Se você atualizar o esquema do seu banco de dados, poderá executar novamente o assistente para Classes de entidade do banco de dados e o assistente para Controladores JPA de classes de entidade para atualizar as classes. Se desejar, depois de criar as classes do controlador JPA, você poderá executar o assistente para Páginas JSF de classes de entidade e especificar o pacote das classes do controlador JPA existentes. Nesse caso, as classes existentes do controlador JPA serão reutilizadas em vez de geradas novamente.

Adicionando dados ao banco de dados

Agora que terminou de criar o aplicativo, você pode implantá-lo e executá-lo. O banco de dados Consulting Agency que você criou está vazio. Você precisa adicionar os dados ao banco de dados, adicionando dados por meio da interface da Web ou executando um script SQL. Depois de adicionar os dados, você verá como os relacionamentos entre as tabelas funcionam.

Adicionando dados com um script SQL

Caso não deseje adicionar os dados por meio de formulários Web, você pode executar o script derby_insert_data_consult.sql incluído em derby-consult.zip.

  1. Abra derby_insert_data_consult.sql, escolhendo Arquivo > Abrir arquivo no menu principal.

    O arquivo se abre automaticamente no editor SQL.

  2. Verifique se o banco de dados consult está selecionado na lista suspensa Conexão na barra de ferramentas do editor SQL e clique no botão Executar SQL na barra de ferramentas.
    captura de tela do editor SQL e script de inserção de dados

    Você pode ver o resultado da execução do script na janela Saída.

Observação. Se você estiver usando o servidor de banco de dados MySQL, abra o arquivo mysql_insert_data_consult.sql incluído no mysql-consult.zip.

Adicionando dados com a interface Web

Você pode adicionar o banco de dados, iniciando o aplicativo em seu navegador e adicionando os dados através de formulários Web.

  1. Clique em Executar projeto principal na barra de ferramentas principal.

    O IDE salva todos os arquivos alterados, reconstrói e reimplanta o aplicativo no servidor. Seu navegador da Web padrão se abre no endereço local http://localhost:8080/ConsultingAgency/.

    captura de tela da janela do navegador com a página JSF de boas-vindas
  2. Clique em Mostrar todos os itens do endereço e clique em Novo endereço.
  3. Adicione os dados seguintes no formulário Novo endereço.
    Campo Valor
    Line1 100 Data Street
    Line2 Suite 432
    City San Francisco
    Region California
    Country USA
    PostalCode 94103
    Clique em Criar.
  4. Clique em Índice para voltar à página de índice.
  5. Clique em Mostrar todos os itens do cliente e clique em Novo cliente.
  6. Adicione os dados seguintes no formulário Novo cliente.
    Campo Valor
    ClientDepartmentNumber 2000
    Client Name Big Data Corp.
    Contact Email
    Contact Password accounting
  7. Selecione Palm Spring Street na lista suspensa BillingAddress.
  8. Clique em Criar e em Índice para retornar para a página de índice.
  9. Clique em Mostrar todos os itens do projeto e clique em Novo projeto.
  10. Adicione os dados seguintes no formulário Novo projeto.
    Campo Valor
    ProjectName Secret Project
    ContactEmail
    ContactPassword project.manager
    Clique em Criar e em Índice para retornar para a página de índice.
  11. Clique em Mostrar todos os itens de status do consultor e em Status do novo consultor.
  12. Adicione os dados seguintes no formulário Novo status do consultor.
    Campo Valor
    StatusId A
    Description Active
    Clique em Criar e em Índice para retornar para a página de índice.
  13. Clique em Mostrar todos os itens do consultor e em Novo consultor.
  14. Adicione os dados seguintes no formulário Novo consultor.
    Campo Valor
    Email
    Password janet.smart
    HourlyRate 80
    BillableHourlyRate 120
  15. Selecione Secret Project no campo ProjectCollection.
  16. Selecione A, Active na lista suspensa StatusId.
  17. Clique em Criar e em Índice para retornar para a página de índice.
  18. Clique em Mostrar todos os itens faturáveis e clique em Novo faturável.
  19. Adicione os dados seguintes no formulário Novo faturável.
    Campo Valor
    StartDate 2008-10-13 00:00:00.0
    EndDate 2008-10-17 00:00:00.0
    Hours 40
    HourlyRate 80
    BillableHourlyRate 120
    Description begin gathering requirements
    ConsultantId
    Project Secret Project
    Clique em Criar e em Novo faturável.
  20. Adicione os dados seguintes no formulário Novo faturável.

    Dessa vez você digitará finish gathering requirements no campo Description.

    Campo Valor
    StartDate 2008-10-20 00:00:00.0
    EndDate 2008-10-24 00:00:00.0
    Hours 40
    HourlyRate 80
    BillableHourlyRate 120
    Description finish gathering requirements
    ConsultantId
    Project Secret Project
    Clique em Criar para voltar à página de índice.
  21. Clique em mostrar todos os itens do recrutador e em Novo recrutador.
  22. Adicione os dados seguintes no formulário Novo recrutador.
    Campo Valor
    Email
    Password bob
  23. Selecione na lista ConsultantCollection.
  24. Observação. Deixe a lista suspensa Cliente vazia.

  25. Clique em Criar e em Índice para retornar para a página de índice.

Depois de adicionar os dados ao banco de dados, você pode navegar pelas páginas geradas para ver os relacionamentos entre as tabelas.

Explorando a funcionalidade no código gerado

Depois de preencher o banco de dados, você poderá ver exemplos de como o código gerado pelo assistente se baseia nas propriedades dos campos de banco de dados.

Campos de chave primária somente leitura

Se um campo no banco de dados for uma chave primária, o assistente irá gerar o código para evitar que o usuário edite o campo nos formulários gerados. Os exemplos seguintes ilustram as instâncias em que o campo de chave primária é somente leitura.

  • Se você navegar para a página Novo cliente, poderá ver que o campo ProjectCollection é somente leitura. Se o aplicativo permitisse uma tentativa de alterar o cliente associado a um projeto existente, a operação falharia porque o cliente associado a um projeto é parte da chave primária do projeto. Você pode verificar isso no script SQL, examinando a chave primária consult_project_pk e a chave estrangeira consult_project_fk_client_name.
  • Se você navegar para Editando a página do projeto, poderá ver que o campo Client é somente leitura. O campo é somente leitura porque o cliente associado a um projeto é parte da chave primária do projeto.

Verificações de erro gerado

O código gerado pode verificar se a ação de um usuário resultará em um erro. Por exemplo, se uma tabela possui uma coluna que não pode ser nula, o código poderá verificar se uma ação resultará que esse campo seja nulo e exibirá uma mensagem de erro. Depois de preencher o banco de dados, você poderá ver exemplos das verificações geradas, tentando editar os dados nos formulários. Você receberá uma mensagem de erro, se tentar fazer as seguintes ações.

  • Criar outro item Projeto, especificando novamente Secret como ProjectName, e preenchendo os campos ContactEmail e Client.

    Aparece uma mensagem de erro indicando que o item já existe.

  • Criar outro item Endereço, mas deixar todos os campos em branco.

    Aparecem mensagens de erro indicando os campos obrigatórios.

  • Edite o item Consultor "", cancelando a seleção de "finish gathering requirements" na lista BillableCollection.

    Aparece uma mensagem de erro indicando que o item Faturável que você desmarcou deve ser mantido porque seu campo consultantId não pode ser nulo.

  • Destruir o item Projeto "Secret Project, Big Data Corp., Dept. 2000".

    Aparece uma mensagem de erro indicando que o item Projeto não pode ser destruído porque nos itens Faturável associados o campo project não pode ser nulo.

  • Destruir um item que já tenha sido destruído por outro usuário.

    Aparece uma mensagem de erro indicando que o item não existe mais e ele não é mais exibido na lista.

    Você pode fazer isso caso use dois navegadores e navegue para a mesma página (por exemplo, a página Listando itens faturáveis) em cada navegador. Destruir um dos itens Faturável em um dos navegadores e tentar destruir o mesmo item no outro navegador.


Consulte também

Para obter mais informações sobre o uso do NetBeans IDE para desenvolver aplicações Web usando Persistência Java e JavaServer Faces, consulte os seguintes recursos: