Este tutorial usa um banco de dados de agência de consultoria chamado consultar
. 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.
A consulta
de banco de dados foi criado para demonstrar o escopo do suporte do IDE para manipular uma variedade de estruturas de banco de dados. O banco de dados, portanto, não pretende ser um exemplo de design de banco de dados recomendado ou melhores práticas. Em vez disso, ele tenta incorporar muitas das características relevantes que são potencialmente encontrados em um projeto de banco de dados. Por exemplo, a consulta
do banco de dados contém todos os tipos de relacionamento possíveis, chaves primárias compostas e muitos tipos de dados diferentes. Consulte as tabelas abaixo para obter uma visão mais detalhada da estrutura do banco de dados.
Notas:
consultar
banco de dados.MySQL com GlassFish Combinação:
Se você estiver usando o MySQL, e estão usando GlassFish v3 ou Open Source Edition 3.0.1, você deve garantir que seu banco de dados é protegido por senha. (Para mais informações, consulte GlassFish Issue 12221 .) Se você estiver usando o MySQL padrão raiz
conta com uma senha em branco, você pode definir a senha de um prompt de linha de comando. , por exemplo, para definir sua senha para nbuser
, em um comando -line pronta digite os seguintes comandos.
shell> mysql-u root mysql> ATUALIZAÇÃO mysql.user SET Password = PASSWORD (' nbuser ') ONDE User =' root '; mysql> FLUSH PRIVILEGES;
Se você receber um ' mysql: comando não encontrado
"erro, então o mysql
comando não tenha sido adicionado ao seu PATH
variável de ambiente. Em vez disso, você pode chamar o comando, digitando o caminho completo para de instalação do MySQL bin
diretório. Por exemplo, se o mysql
comando está localizado em seu computador em / usr / local / mysql / bin
, digite o seguinte:
shell> / usr / local mysql / bin / root / mysql-u
Para mais informações, consulte o Manual de Referência do MySQL oficial:
Execute as seguintes etapas para criar um banco de dados e conectar a ele a partir do IDE.
jdbc: mysql :/ / localhost: 3306/consult [root no esquema padrão]
).mysql_create_consult.sql
. Clique em Abrir. O arquivo se abre automaticamente no editor SQL. consulta
de banco de dados está selecionado na lista suspensa Conexão na barra de ferramentas do editor SQL e clique no SQL Run ( Ao clicar em Executar SQL, a seguinte saída será exibida na janela de saída.
Para confirmar que 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 da tabela, índices e todas as chaves estrangeiras. Você pode clicar com o botão direito em uma coluna e escolha Propriedades para exibir informações adicionais sobre a coluna.
Nota: Se você não ver nenhuma tabela sob o nó Tabelas, clique com o botão direito do mouse no nó Tabelas e escolha Atualizar.
Olhando para a estrutura da consulta
de banco de dados, você pode 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 de um banco de dados, o IDE gera automaticamente o código apropriado para os vários tipos de campo.
A tabela a seguir descreve as tabelas encontradas no consultar
banco de dados.
Tabela do banco de dados | Descrição | Características Design |
---|---|---|
CLIENTE | Um cliente da agência de consultoria | Não-gerada, a chave primária composta (cujos campos não constituem uma chave estrangeira) |
CONSULTOR | Um funcionário da agência de consultoria que os clientes podem contratar com base num contrato | 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) | Não gerada chave primária do tipo CHAR |
RECRUTA | Um funcionário da agência de consultoria responsável por conectar clientes e consultores | |
PROJETO | Um projeto que um cliente possui com os consultores da agência de consultoria | Não-gerada, a chave primária composta que inclui dois campos que constituem uma chave estrangeira para a tabela CLIENT |
BILLABLE | Um conjunto de horas trabalhadas por um consultor em um projeto, para o qual a agência de consultoria cobra do cliente relevante | Inclui um campo de artefato do tipo CLOB |
ENDEREÇO | Endereço de faturamento de um cliente | |
PROJECT_CONSULTANT | Junte-se a tabela indicando quais consultores estão atualmente atribuídos a projectos que | PROJECT e consultor referências cruzadas, o primeiro tendo uma chave primária composta |
A consulta
de banco de dados inclui uma variedade de relacionamentos. Ao criar classes de entidade de um banco de dados, o IDE gera automaticamente as propriedades do tipo Java apropriado com base no tipo SQL das colunas. A tabela a seguir descreve as relações de entidade para a consulta
de dados. (Relações inversas não são mostrados.)
Entidade | Entidade relacionada | Informações sobre relacionamento | Descrição |
---|---|---|---|
CLIENTE | RECRUTA | nulo um para um com edição manual; nulo um-para-muitos, se não editada | CLIENT tem muitos recrutadores e RECRUTA possui zero ou um cliente (caso não seja editado manualmente) |
CLIENTE | ENDEREÇO | não-nulo um-para-um | CLIENT tem um endereço e possui zero ou um CLIENT |
CLIENTE | PROJETO | não-nulo um para muitos; em uma entidade de projeto, o valor do campo cliente é parte da chave primária do projeto | CLIENT tem muitos projetos e PROJECT possui um CLIENT |
CONSULTOR | PROJETO | muitos-para-muitos | CONSULTOR tem muitos projetos e PROJECT possui muitos consultores |
CONSULTOR | BILLABLE | não-nulo um-para-muitos | CONSULTOR tem muitas billables e BILLABLE tem um CONSULTOR |
CONSULTANT_STATUS | CONSULTOR | não-nulo um-para-muitos | CONSULTANT_STATUS tem muitos consultores e consultor tem uma CONSULTANT_STATUS |
CONSULTOR | RECRUTA | nulo um-para-muitos | CONSULTOR possui zero ou um recrutador e RECRUTA tem muitos consultores |
BILLABLE | PROJETO | não-nulo um-para-muitos | BILLABLE tem um projeto e PROJECT possui muitos billables |
Agora que o banco de dados é criado, você pode criar o aplicativo da Web e usar as classes de entidade do assistente de banco de dados para gerar classes de entidade com base nas tabelas de banco de dados.
Neste exercício, você cria um projeto web e adicionar o framework JavaServer Faces ao projeto. Ao criar o projeto, você irá selecionar JavaServer Faces no painel Frameworks do assistente para Novo projeto.
ConsultingAgency
para o nome do projeto e defina a localização do projeto. Clique em Avançar.
Ao clicar em Terminar, o IDE gera o projeto de aplicação Web e abre index.xhtml
no editor.
Depois de se conectar a um banco de dados no IDE, você pode usar as classes de entidade a partir do banco de dados do assistente 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.
ConsultingAgency
nó do projeto e escolha Novo> Classes de entidade do banco de dados. (Se esta opção não estiver na lista, escolha Outro. Em seguida, no assistente de arquivo, selecione a categoria Persistence, então Classes de entidade do banco de dados.)jdbc / consult
como o Nome JNDI e selecione o jdbc: mysql :/ / localhost: 3306/consult
conexão como a conexão de banco de dados. consultar
banco de dados aparecem na caixa de listagem Tabelas disponíveis.jpa.entities
como o nome do pacote.
Ao clicar em Terminar, o IDE gera as classes de entidade no jpa.entities
pacote do projeto.
Ao utilizar o assistente para criar classes de entidade de um banco de dados, o IDE examina as relações entre as tabelas do banco de dados. Na janela Projetos, se você expandir o jpa.entities
nó do pacote, você pode ver que o IDE gerou uma classe de entidade para cada tabela, exceto para a PROJECT_CONSULTANT
mesa. O IDE não criou uma classe de entidade para PROJECT_CONSULTANT
porque a tabela é uma tabela de junção.
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.
Se você olhar para o código gerado para as classes de entidade que você pode ver que o assistente adicionou @ GeneratedValue
anotações para os campos ID gerados automaticamente e @ Básico (opcional = "false")
anotações para alguns dos campos nas classes de entidade. Com base no @ Básico (= "false" opcional)
anotações, as páginas JSF de assistente Classes de entidade pode gerar o código que inclui verificações para evitar violações de coluna não nulo para esses campos.
Agora que as classes de entidade são criados, você pode criar a interface Web para exibir e modificar os dados. Você vai usar as páginas JSF de assistente Classes de entidade para gerar páginas JavaServer Faces. O código gerado pelo assistente é baseado em anotações de persistência contidas nas classes de entidade.
Para cada classe de entidade o assistente gera os seguintes arquivos.
Create.xhtml
, Edit.xhtml
, List.xhtml
e View.xhtml
)O assistente também gera os seguintes arquivos.
JsfUtil
, PaginationHelper
)faces-config.xml
arquivo é criado se não existir.)Para gerar as páginas JSF:
O Disponível caixa Classes de entidade enumera as sete classes de entidade contidas no projeto. A caixa não lista as classes incorporadas ( ClientPK.java
e ProjectPK.java
).
jpa.session
para o JPA Session Bean Package.jsf
para o pacote de classes JSF./ resources / Bundle
'no campo Localização Bundle Name. Isso irá gerar um pacote chamado recursos
que o Bundle.properties
arquivo irá residir dentro (Se você deixar este campo em branco, as propriedades pacote será criado no pacote padrão do projeto.)
Para deixar o IDE melhor acomodar as suas convenções do projeto, você pode personalizar todos os arquivos gerados pelo assistente. Clique no link Personalizar modelo para modificar os modelos de arquivos utilizados pelo assistente. Em geral, você pode acessar e fazer alterações em todos os modelos mantidos pelo IDE usando o Template Manager (Ferramentas> Modelos).
jpa.session
pacote, e as sessões de escopo, beans gerenciados JSF no jsf
pacote. Cada bean de sessão sem estado manipula as operações para a classe de entidade correspondente, incluindo a criação, edição e destruição de instâncias da classe de entidade por meio da API Java Persistence. Cada bean gerenciado JSF implementa a javax.faces.convert.Converter
interface e executa o trabalho de converter as instâncias da classe de entidade correspondente à corda
objetos e vice-versa.Se você expandir o nó Páginas da Web, você pode ver que o IDE gerou uma pasta para cada uma das classes de entidade. Cada pasta contém os arquivos Create.xhtml
, Edit.xhtml
, List.xhtml
e View.xhtml
. O IDE também modificou o index.xhtml
arquivo através da inserção de links para cada uma das List.xhtml
páginas.
Cada bean gerenciado JSF é específica para os quatro arquivos Facelets correspondentes e inclui o código que chama os métodos no bean de sessão apropriado.
Expanda a recursos
nó pasta para localizar o defeito jsfcrud.css
estilo que foi gerado pelo assistente. Se você abrir a página de boas vindas do aplicativo ( index.xhtml
) ou o arquivo de modelo Facelets ( template.xhtml
) no editor, você verá que ele contém uma referência à folha de estilo.
<h:outputStylesheet name="css/jsfcrud.css"/>
O arquivo de modelo Facelets é utilizado por cada um dos quatro arquivos Facelets para cada classe de entidade.
Se você expandir o nó Pacotes de fontes você pode ver os beans de sessão, beans gerenciados JSF, classes de serviços públicos, e conjunto de propriedades que o assistente gerado.
O assistente também gerado um arquivo de configuração Faces ( faces-config.xml
) para registrar a localização das propriedades pacote. Se você expandir o nó Arquivos de configuração e abrir faces-config.xml
no editor de XML, você pode ver que a seguinte entrada está incluída.
<application> <resource-bundle> <base-name> / resources / Bundle </ base-name> <var> pacote </ var> </ Resource-bundle> </ Application>
Além disso, se você expandir o novo recursos
do pacote, você encontrará o Bundle.properties
arquivo que contém mensagens para o idioma padrão do cliente. As mensagens foram derivadas das propriedades da classe entidade.
Para adicionar um novo conjunto de propriedades, clique com o botão direito do Bundle.properties
arquivo e escolha Personalizar. O diálogo Customizer permite adicionar novos locais para a sua aplicação.
Agora que seu projeto contém classes de entidade, beans de sessão EJB para controlar as classes de entidade, e um JSF potência front-end para exibir e modificar dados, tente executar o projeto para ver os resultados.
O que se segue é uma série de exercícios curtos, opcionais que ajudam você a se familiarizar com o aplicativo, bem como os recursos e funcionalidades oferecidas pelo IDE.
Quando da aplicação da página de boas-vindas for exibida, você é fornecido com uma lista de links que permitem que você visualize as entradas contidas em cada tabela do banco de dados.
Os links foram adicionados à página de boas-vindas ( index.xhtml
) quando concluído o Páginas JSF do assistente Classes de entidade. Eles são fornecidos como pontos de entrada para as páginas Facelets que fornecem funcionalidade CRUD no banco de dados da agência de consultoria.
<h:body> Olá do Facelets <h:form> <h:commandLink action="/address/List" value="Show Todos Endereço Items"/> </ H: form> <h:form> <h:commandLink action="/billable/List" value="Show Todos faturável Items"/> </ H: form> <h:form> <h:commandLink action="/client/List" value="Show Todos Cliente Items"/> </ H: form> <h:form> <h:commandLink action="/consultant/List" value="Show Todos Consultor Items"/> </ H: form> <h:form> <h:commandLink action="/consultantStatus/List" value="Show Todos ConsultantStatus Items"/> </ H: form> <h:form> <h:commandLink action="/project/List" value="Show Todos os Projeto Items"/> </ H: form> <h:form> <h:commandLink action="/recruiter/List" value="Show Todos Recruiter Items"/> </ H: form> </ H: body>
Mostrar Todos os itens do consultor
'link. Olhando para o código acima, você pode ver que a página de destino é / consultor / List.xhtml
. (Em JSF 2.x, a extensão do arquivo é deduzida devido à navegação implícita.) O banco de dados atualmente não contém dados de amostra. Você pode adicionar dados manualmente, clicando no botão ' Criar novo consultor
link 'e utilizando o formulário on-line fornecido. Isto provoca o consultor / / Create.xhtml
página para exibir. Você também pode executar um script SQL no IDE para preencher tabelas com dados de amostra. As sub-seções seguintes exploram as duas opções.
Você pode clicar no link do índice para voltar aos links listados na página de boas-vindas. Os links fornecê-lo com uma visão dos dados contidos em cada tabela do banco de dados e desencadear o List.xhtml
arquivo para cada pasta de entidade para exibir. Como é demonstrado mais tarde, depois de adicionar dados às tabelas, outros links serão exibidos para cada entrada permitindo que você visualize ( View.xhtml
), edição ( Edit.xhmtl
) e destruir os dados de um único registro da tabela.
Nota. Se o aplicativo não consegue implantar, consulte a seção de solução de problemas abaixo. (Veja também a seção de solução de criação de uma aplicação Web simples usando um banco de dados MySQL ).
Execute o script fornecido, que gera dados de amostra para as tabelas do banco de dados. O roteiro ( mysql_insert_data_consult.sql
) está incluído no arquivo zip do banco de dados da agência de consultoria que você pode baixar a partir da tabela de software necessário .
Dependendo do servidor de banco de dados que você está trabalhando (MySQL ou JavaDB), você pode executar o script fornecido, que gera dados de amostra para as tabelas do banco de dados. Para o MySQL, este é o mysql_insert_data_consult.sql
script.Para JavaDB, este é o javadb_insert_data_consult.sql
script. Ambos os scripts são incluídos nos respectivos arquivos, que podem ser baixados da tabela de software necessário .
consulta
de banco de dados está selecionado na lista suspensa Conexão na barra de ferramentas do editor SQL.
Ou clique com o botão direito no editor e escolha Executar instrução ou clique no Executar SQL ( botão). Você pode ver o resultado da execução do script na janela de saída.
consulta
de banco de dados. Para fazer isso, clique na guia servidor GlassFish na janela de saída (A guia servidor GlassFish exibe o log do servidor.), Depois clique no Restart Server ( Mostrar todos os itens de Consultoria
'link. Você vai ver que a lista não está mais vazio. Você pode usar o visualizador de tabelas do banco de dados do IDE para exibir e modificar os dados da tabela mantidos diretamente no banco de dados. Por exemplo, clique com o botão direito do consultor
mesa na janela Serviços e escolha Visualizar dados.
A consulta SQL usada para executar a ação de monitores na parte superior do editor, e uma visão gráfica da tabela mostra abaixo.
Dê um duplo clique no interior das células de tabela para realizar modificações em linha aos dados. Clique na Commit Registros ( ícone) para confirmar as alterações para o banco de dados.
A visualização gráfica oferece muito mais funcionalidade. Consulte Suporte de Banco de Dados no NetBeans IDE para obter mais informações.
consultor / / List.xhtml
página no editor. Linha 8 indica que a página conta com os Facelets template.xhtml
arquivo para renderizar.<ui:composition template="/template.xhtml">
Para exibir os números de linha, clique com o botão direito na margem esquerda do editor e escolha Mostrar números de linha.
template.xhtml
. Pressione Alt-Shift-O (Ctrl-Shift-O no Mac), em seguida, começar a digitar modelo
. Clique em OK (ou pressione Enter).
<ui:insert>
tags para inserir o conteúdo de outros arquivos em seu título e do corpo. Coloque o cursor sobre o <ui:insert>
tag, em seguida, pressione Ctrl-Espaço para chamar uma janela pop-up de documentação. Você pode pressionar Ctrl-Espaço no marcações JSF e seus atributos para chamar uma documentação pop-up. A documentação que você vê é tomada a partir das descrições fornecidas no oficial Documentação JSF Tag Library .
List.xhtml
arquivo (pressione Ctrl-Tab). Os <ui:define>
tags são usadas para definir o conteúdo que será aplicado a título eo corpo do modelo. Este padrão é utilizado para todos os quatro arquivos Facelets ( Create.xhtml
, Edit.xhtml
,List.xhtml
e View.xhtml
) gerados para cada classe de entidade.Bundle.properties
arquivo. Pressione Ctrl-Espaço para ver a mensagem localizada.
Na imagem acima, você pode ver que a expressão EL resolve ' lista
', que é aplicado para o título do modelo e pode ser verificada a partir da página renderizada no navegador.
novo consultor Criar
link (Linha 92). Esta é a seguinte:<h:commandLink action="#{consultantController.prepareCreate}" value="#{bundle.ListConsultantCreateLink}"/>
commandLink
da ação
atribuir a invocar a documentação pop-up. A ação
atributo indica o método que manipula o pedido quando o link é clicado no navegador. A seguinte documentação é fornecida:
ação
valor normalmente se refere a um método em um bean gerenciado JSF que avalia um string
. A corda é então usada por do JSF NavigationHandler
para encaminhar o pedido para a visualização adequada. Você verificar isso nas etapas seguintes.consultantController
e pressione Ctrl-Espaço. Conclusão de código do editor indica que consultantController
é um bean gerenciado JSF. prepareCreate
e pressione Ctrl-Espaço. Métodos de listas de conclusão código contido no consultantController
bean gerenciado. prepareCreate
. A ligação é formada, permitindo-lhe navegar diretamente para o prepareCreate ()
método na consultantController
bean gerenciado. prepareCreate ()
método (exibido abaixo).prepareCreate public String () { atual = new Consultant (); SelectedItemIndex = -1; retorno "Criar"; }O método retorna
Criar
. O NavigationHandler
reúne informações nos bastidores, e aplica-se a criar
string para o caminho que tem como alvo a visão enviada em resposta ao pedido: / consultor / Criar xhtml.
. (Em JSF 2.x, a extensão do arquivo é deduzida devido à navegação implícita.)Criar novo consultor
link '. Como demonstrado na sub-seção anterior, este aciona o consultor / Create.xhtml /
página para renderizar.RecruiterId
e StatusId
campos em branco. Campo | Valor |
---|---|
ConsultantId | 2 |
jack.smart @ jsfcrudconsultants.com | |
Senha | jack.smart |
HourlyRate | 75 |
BillableHourlyRate | 110 |
HireDate | 07/22/2008 |
Resumo | Eu sou um grande consultor. Contrate-me - Você não vai se decepcionar! |
RecruiterId | --- |
StatusId | --- |
StatusId
campo. Por que isso aconteceu? Reexaminar o diagrama de entidade-relacionamento do banco de dados da agência de consultoria . Como indicado na tabela de relacionamentos acima, o CONSULTOR
e CONSULTANT_STATUS
tabelas partes, uma relação não-nulo um para muitos. Portanto, cada entrada na CONSULTOR
tabela deve conter uma referência a uma entrada na CONSULTANT_STATUS
mesa. Isto é indicado pelaconsultant_fk_consultant_status
chave estrangeira, que liga as duas tabelas.
Você pode visualizar as chaves estrangeiras detidas por tabelas expandindo o nó Chaves estrangeiras de uma tabela na janela Serviços (Ctrl-5; ⌘ -5 no Mac).
entity.ConsultantStatus [statusId = A]
do StatusId
. lista suspensa Nota: Você pode deixar o RecruiterId
campo em branco. Como indicado na base de dados diagrama de entidade-relacionamento , há uma relação nulo um-para-muitos entre o CONSULTOR
e RECRUTA
tabelas, o que significa que as entradas na CONSULTOR
não precisa estar associada a um RECRUTA
entrada.
Mostrar Todos os itens do consultor
, você vai ver a nova entrada listada na tabela.Em geral, as páginas Facelets gerados erros para fornecer entrada de utilizador que apresenta:
Na sub-seção anterior, você viu como o StatusId
lista suspensa desde que com o não tão user-friendly entity.ConsultantStatus [statusId = A]
opção. Você pode já estar ciente de que o texto exibido para cada item neste drop-down é uma representação de cadeia para cada ConsultantStatus
entidade encontrou (ou seja, a classe de entidade ' toString ()
método é chamado).
Esta sub-seção demonstra como você pode usar a conclusão de código do editor, documentação e suporte de navegação para fazer esta conclusão. Ele também se preparar uma mensagem mais amigável para a lista drop-down.
/ consultor / Create.xhtml
arquivo no editor. Esta é a forma Consultor New Criar qual você apenas exibida no navegador. Desloque-se para o código para o StatusId
drop-down (mostrado em negrito abaixo).<h:outputLabel value="#{bundle.CreateConsultantLabel_resume}" for="resume" /> <h:inputTextarea rows="4" cols="30" id="resume" value="#{consultantController.selected.resume}" title="#{bundle.CreateConsultantTitle_resume}" /> <h:outputLabel value="#{bundle.CreateConsultantLabel_statusId}" for="statusId" /> <h:selectOneMenu id="statusId" value="#{consultantController.selected.statusId}" title="#{bundle.CreateConsultantTitle_statusId}" required="true" requiredMessage="#{bundle.CreateConsultantRequiredMessage_statusId}"> <f:selectItems value="#{consultantStatusController.itemsAvailableSelectOne}"/> </ H: selectOneMenu> <h:outputLabel value="#{bundle.CreateConsultantLabel_recruiterId}" for="recruiterId" /> <h:selectOneMenu id="recruiterId" value="#{consultantController.selected.recruiterId}" title="#{bundle.CreateConsultantTitle_recruiterId}"> <f:selectItems value="#{recruiterController.itemsAvailableSelectOne}"/> </ H: selectOneMenu> </ H: panelGrid>
valor
aplicado ao <f:selectItems>
tag. O valor
atributo determina o texto exibido para cada item na lista drop-down. Pressione Ctrl-Espaço no itemsAvailableSelectOne
. Conclusão de código do editor indica que oConsultantStatusController
's getItemsAvailableSelectOne ()
método retorna um array de SelectItem
objetos.
itemsAvailableSelectOne
. A ligação é formada, permitindo-lhe navegar diretamente para o getItemsAvailableSelectOne ()
método na ConsultantStatus
código fonte da entidade.Clique neste link.SelectItem []
valor de retorno na assinatura do método e pressione Ctrl-Espaço para chamar a documentação pop-up.
Clique o navegador web ( ícone) na janela da documentação para abrir o Javadoc em um navegador externo.
ItemSeleção
classe pertence ao quadro JSF. O UISelectOne
componente, tal como mencionado na documentação, é representado pela <h:selectOneMenu>
etiqueta de marcação que lhe examinada em Passo 1 acima.findAll ()
. Um pop-up aparece, exibindo a assinatura do método. Você pode ver que aqui ejbFacade.findAll ()
retorna uma lista
de ConsultantStatus
objetos.
JsfUtil.getSelectItems
. Passe o mouse sobre getSelectItems
e pressione Ctrl (⌘ no Mac) e clique no link que aparece. Observação: Lembre-se que JsfUtil
é uma das classes de utilitários que foi gerado quando você completou a Páginas JSF do assistente Classes de entidade . O método percorre a lista de entidades (ou seja, a lista
de ConsultantStatus
objetos), criando um SelectItem
para cada um. Como indicado na negrito abaixo, cada SelectItem
é criado usando o objeto de entidade e um rótulo para o objeto.
ItemSeleção public static [] getSelectItems (List <?> entidades, boolean selectOne) { int size = selectOne? entities.size () + 1: entities.size (); SelectItem [] itens = new SelectItem [tamanho]; int i = 0; if (selectOne) { itens [0] = new SelectItem ("", "---"); i + +; } para (Object x: entidades) { itens [i + +] = new SelectItem (x, x.toString ()); } devolver os itens; }
O rótulo é criado usando a entidade toString ()
método, e é a representação do objeto quando processado na resposta. (Veja a definição Javadoc para o ItemSeleção valor java.lang.Object, etiqueta java.lang.String) (
construtor).
Agora que você verificou que a entidade toString ()
método é o que é processado no navegador quando você exibir itens em uma lista drop-down, modifique o ConsultantStatus
toString ()
método.
ConsultantStatus
classe de entidade no editor. Modifique o toString
método para retornar o statusId
e descrição
. Estas são propriedades da entidade que correspondem às duas colunas da CONSULTANT_STATUS
tabela.public String toString () { voltar statusId + "," + descrição; }
Mostrar todos os itens Consultor
ligação, clique em Criar novo consultor
.
Inspecione o StatusId
drop-down. Você verá que ele agora exibe o status de ID e uma descrição para o registro contido no banco de dados CONSULTANT_STATUS
mesa.
Dependendo da configuração, a implantação do aplicativo para o servidor pode falhar e você pode ver a seguinte mensagem na janela de saída.
GlassFish Server 4 está em execução. Implantação no local em / MeusDocumentos / ConsultingAgency / build / web GlassFish Server 4, implantar nula, falsa / Meus Documentos / ConsultingAgency / nbproject / build-impl.xml: 1045: O módulo não foi implementado. Veja o log do servidor para obter detalhes.
A causa mais comum para a falha é um problema quando a gerar os recursos JDBC no servidor. Se este for o caso, você provavelmente verá uma mensagem semelhante à seguinte na guia de registro do servidor na janela de saída.
Grave: Exception, enquanto prepara o app: recurso inválido: jdbc / consult__pm com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: recurso inválido: jdbc / consult__pm
Se a guia de registro do servidor não está aberto, você pode abrir a guia clicando com o botão direito no nó do servidor GlassFish na janela Serviços e escolhendo Exibir Domínio log do servidor.
Esta aplicação requer dois recursos JDBC:
persistence.xml
), você pode ver que o nome JNDI para a fonte de dados JTA para esta aplicação é jdbc / consult
.O recurso JDBC identifica o pool de conexão que está sendo usada pelo aplicativo.
consultPool
.O recurso JDBC e pool de conexão são especificados no glassfish-resources.xml
arquivo. Você pode abrir glassfish-resources.xml
no editor, expandindo o nó Recursos do servidor na janela Projetos e clicando duas vezes no arquivo. O arquivo será semelhante ao seguinte.
<? Xml version = "1.0" encoding = "UTF-8"> <! Recursos DOCTYPE PUBLIC "- / / GlassFish.org / / Aplicação DTD GlassFish Server 3.1 Resource Definições / / EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd"> <resources> <Jdbc-connection-pool permitir-não-componentes-chamadores = "false" associado-com-thread = "false" conexão de criação de Retry-tentativas = "0" conexão de criação de nova tentativa-interval-em-segundos = " 10 "conexão-vazamento reclamar =" false "conexão-escape-timeout-em-segundos =" 0 "conexão-validação do método =" auto-commit "datasource-classname =" com.mysql.jdbc.jdbc2.optional. MysqlDataSource "todos os conexões fail-=" false "idle-timeout-em-segundos =" 300 "está-connection-validação-required =" false "é garantido-isolamento de nível =" true "lazy-connection-association = "false" lazy-connection-alistamento = "false" match-conexões = "false" max-connection-usage-count = "0" max-pool-size = "32" max-esperar-tempo-em-millis = " 60000 "name =" consultPool "não-transacionais-conexões =" "ping =" false false "pool-redimensionar-quantidade =" 2 "pooling =" true "res-type =" javax.sql.DataSource "declaração-cache- size = "0"-declaração de vazamentos reclamar = "false" declaração de vazamentos-timeout-em-segundos = "0" declaração-timeout-em-segundos = "1"-pool-size constante = "8" validar- atmost-vez-período-em-segundos = "0" wrap-jdbc-objetos = "false"> <property name="serverName" value="localhost"/> <property name="portNumber" value="3306"/> <property name="databaseName" value="consult"/> <property name="User" value="root"/> <property name="Password" value="nb"/> <property name="URL" value="jdbc:mysql://localhost:3306/consult?zeroDateTimeBehavior=convertToNull"/> <property name="driverClass" value="com.mysql.jdbc.Driver"/> / <jdbc-connection-pool> <jdbc-resource enabled="true" jndi-name="jdbc/consult" object-type="user" pool-name="consultPool"/> / <resources>
Em glassfish-resources.xml
você pode ver que o recurso JDBC jdbc / consult
identifica consultPool
como o nome do pool de conexão. Você também pode ver as propriedades para consultPool
. Nesta aplicação apenas uma fonte de dados e um pool de conexão são definidos em glassfish-resources.xml
. Em alguns casos, você pode querer especificar recursos adicionais, por exemplo, para identificar um armazenamento de dados temporário que é usado apenas para o desenvolvimento ou para testes.
Se o recurso JDBC e pool de conexão não foram gerados automaticamente no servidor quando você tentou o aplicativo, você pode executar as seguintes etapas para criar os recursos manualmente no GlassFish Admin Console.
glassfish-resources.xml
no editor, se ele já não estiver aberto.
Você usará os valores de propriedades que são especificadas no glassfish-resources.xml
quando você criar o recurso JDBC e pool de conexões.
Você pode ver os recursos JDBC que estão atualmente registrados com o servidor. Você vai precisar para criar jdbc / consultar
e consultPool
se eles não estão listados sob o nó JDBC no painel de navegação comum tarefas. Alguns recursos de JDBC foram criados por padrão quando você instalou o servidor e são apresentados como sub-nós.
Você pode encontrar os valores para as propriedades em glassfish-resources.xml
.
O novo pool de conexão é criada no servidor quando você clicar em Concluir e um nó para o pool de conexão é exibido sob o nó Pools de conexão JDBC.
O novo recurso JDBC é criada no servidor quando você clicar em OK e um nó para o recurso é exibido sob o nó Recursos JDBC.
Na janela Serviço do IDE, você pode expandir o nó Recursos sob o servidor GlassFish e ver que IDE adicionou novos recursos. Talvez seja necessário atualizar a exibição (clique com o botão direito e escolha Atualizar Recursos) para ver as mudanças.
Para mais dicas sobre solução de problemas ao usar o MySQL eo IDE, consulte os seguintes documentos:
Para mais informações sobre JSF 2.x, consulte os seguintes recursos.
Nome...: PAULO PACHECOE-Mail.: PauloSS...@gmail.com.brMSN....: PauloSS...@Hotmail.com
Yahoo..: PauloSSPacheco@yahoo.comFixo...: 085 3086 6769Celular: 085 8888 4498 OI085 9702 4498 TIM