Arquivos de sites
Maven – Resolvendo erro ArtifactDescriptorException
Posted by Gustavo Amaro
E ai galeraaaa, blz?
Tive que formatar minha máquina… e quando abri meu eclipse me deparei com o erro:
ArtifactDescriptorException
Mesmo tendo todas as bibliotecas no lugar, por algum motivo o maven não as encontrava…
Dei uma pesquisada e achei a seguinte solução:
1 – Clique com o botão direito em cima do projeto
2 – Vá em Maven
3 – Clique em Update Project…
4 – Selecione a opção ‘Force Update Snapshots/Releases‘
5 – Clique em ‘OK‘.
Se você tiver bastante bibliotecas, demorará um pouco, após o termino do processo,
provavelmente seu projeto ja vai está com as bibliotecas ok…
abraços!
Fonte: Stackoverflow – Saman Abdolmohammad
Publicado em Maven
Etiquetas: ArtifactDescriptorException, bibliotecas, como arrumar, Eclipse, erro, error, exception, lib, libs, maven, maven 2, problema, projeto, reconhecer, release, resolver, snapshot, update, update project
Parte 3 – Tutorial do Framework de validação do Struts2 com Exemplo
Posted by Gustavo Amaro
Seja bem vindo a parte 3 de uma série de 7 partes do tutorial aonde vamos passar por diferentes aspectos práticos do framework Struts2. Na última parte nós criamos uma Aplicação básica de Struts2 do zero. Eu recomendo fortemente que você passe pelos artigos anteriores no caso de você ser novo no Struts2.
Nesse artigo vamos aprender como alavancar o framework de validação do Struts2 em uma aplicação. Para isso utilizaremos a aplicação StrutsHelloWorld a qual nós criamos no artigo anterior como base e começaremos adicionando a lógica de validação a ele.
Introdução ao framework de validação do Struts2
A action do Struts2 depende de um framework de validação fornecido pela XWork para permitir a aplicação de regras de validação de entrada para nossa Action antes delas serem executadas. O framework de validação do Struts2 nos permite separar a lógica de validação do real código Java/JSP, onde isso pode ser revisado e facilmente modificado depois.
O framework de validação do Struts2 alivia muita das dores de cabeça associadas com manipulação de validação de dado, permitindo você focar no código de validação e não no mecanismo de captura de dados e reexibição de dados incompletos ou inválidos.
O framework de validação vem com um conjunto de retinas úteis para manipular o formulário de validação automaticamente e isso pode tratar o formulário de validação de ambos os lados, servidor (Server Side) ou cliente (Client Side). Se determinada validação não está presente, você pode criar sua própria lógica de validação implementando a interface com.opensymphony.xwork2.Validator
e plugá-la dentro do framework de validação como um componente reutilizável.
O validador usa arquivos de configuração XML para determinar quais rotinas de validação devem ser instaladas e quais delas devem ser aplicadas para uma determinada aplicação.O arquivo validators.xml contém todas as declarações dos validadores comuns. Se o arquivo validators.xml não estiver presente no classpath, um arquivo de validação padrão é carregado do path com/opensymphony/xwork2/validator/validators/default.xml
.
O primeiro arquivo de configuração, declara as rotinas de validação que devem ser plugadas dentro do framework e fornece nomes lógicos para cada uma das validações. O arquivo validator-rules.xml também define o código JavaScript do lado cliente para cada rotina de validação. O validador pode ser configurado para enviar esse código JavaScript para o navegador então essas validações são realizadas tanto do lado cliente quanto do lado servidor.
Escopo dos Validadores (Validators Scope)
Temos 2 tipos de validadores na Validação do Struts2.
- Field Validators (Validação de Campos)
- Non-field validators (Validação de Não-Campos)
Field validators, como o nome indica, atua em um único campo acessível através de uma action. Um validador, em contrapartida, é mais genérico e pode fazer validações no contexto inteiro da action, invocando mais de um campo (ou até mesmo nenhum campo) na regra de validação. A maioria das validações podem ser definidas em forma de campo. Isso deve ter preferência sobre validação non-field sempre que possível, como mensagens de validação de campo são vinculados ao campo relacionado e será apresentado próximo ao elemento de entrada correspondente na view respectiva.
<validators>
|
Non-field validators apenas adiciona mensagens de nível de action. Validações non-field fornecida pela XWork é ExpressionValidator (Validador de Expressão).
<validators>
|
Primeiros passos
Vamos adicionar a lógica de validação na aplicação StrutsHelloWorld que nós criamos no artigo anterior. Para esse tutorial, vamos criar uma classe Action chamada CustomerAction a qual conterá poucos campos. Crie um arquivo CustomerAction.java no pacote net.viralpatel.struts2.
Copie o seguinte conteúdo dentro dele.
CustomerAction.java
package net.viralpatel.struts2;
|
Observe que a classe CustomerAction tem os campos name, email, telephone e age. Também tem um método chamado addCustomer()
o qual não tem nenhuma lógica, ele apenas retorna SUCCESS.
Agora nós vamos adicionar uma entrada para essa classe action no arquivo struts.xml. Abra o arquivo struts.xml o qual estará presente abaixo da pasta resources. E adicione o seguinte conteúdo entre as tags <package></package>.
<action name="customer"
|
Observe que nós estamos mapeando a classe CustomerAction com o nome customer. Também em sucesso o usuário será redirecionado a página SuccessCustomer.jsp. Repare que tem outra tag de resultado com nome input. Sempre que a lógica de validação encontra algum erro de validação, redireciona o usuário de volta a página especificada como input. Assim no nosso exemplo, o usuário será redirecionado de volta para Customer.jsp no caso de quaisquer erros.
Crie duas novas JSPs Customer.jsp
(qual conterá o formulário do Customer) e SuccessCustomer.jsp
(qual será mostrada em sucesso).
Customer.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
|
SuccessCustomer.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
|
Nós criamos o arquivo Customer.jsp qual irá exibir o formulário Customer. Mas nós não temos link para esta página na nossa aplicação web. Então nós criaremos um link para Customer.jsp da página Welcome.jsp. Abra a página Welcome.jsp e adicione o seguinte código de link dentro dela.
<s:a href="Customer.jsp">Add Customer</s:a> |
Agora abra o arquivo ApplicationResources.properties da pasta resources e adicione as seguintes chaves/valores dentro dela.
name= Name
|
Execute o código no Eclipse e veja a saida. Você verá a página de login. Entre com username=admin e a senha=admin123 e faça o login. Na página de boas vindas você verá um link para página Add Customer. Clique naquele link e você verá a página Customer.
Adicionando a lógica de validação
Agora nós terminamos o básico do formulário customer no qual nós vamos adicionar a lógica de validação. Seguem as regras de validações:
- Campo Name é obrigatório.
- Campo Age é obrigatório. Deve ser um número entre 1 e 100.
- Campo Email é obrigatório. Deve ser um endereço de email válido.
- Campo Telephone é obrigatório.
A fim de definir a lógica de validação para um formulário em particular, primeiro nós devemos criar um arquivo XML no qual manterá esse dado. O Struts2 define uma convenção de nomenclatura específica na definição dos arquivos XML de validação. O formato é <NomeDaClasseAction>-validation.xml. Então para nossa aplicação vamos criar um arquivo CustomerAction-validation.xml. Observe que este arquivo deve estar presente no mesmo pacote da classe action.
Crie o arquivo CustomerAction-validation.xml no pacote net.viralpatel.struts2. E copie o seguinte conteúdo dentro dele.
CustomerAction-validation.xml
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
|
E é isso. Nós apenas adicionamos a lógica de validação ao nosso exemplo. Veja que os arquivos XML de validação contém diferentes field-validators.
Validação do lado cliente
É muito fácil adicionar a validação do lado cliente ou validação JavaScript a qualquer formulário em Struts2. Tudo o que você precisa fazer é adicionar validate=”true” na tag form no seu arquivo JSP. Por exemplo abra o Customer.jsp e adicione validate=”true” na tag form. O Struts2 automaticamente gerará o código JavaScript para validação do lado cliente do formulário.
<s:form action="customer.action" method="post" validate="true">
|
Isso é tudo pessoal
Execute a aplicação e teste o formulário Customer com diferentes valores.
Página Customer
Página Customer com erros
Página Customer com sucesso
Download do Código Fonte
Struts2_Validation_example.zip (3.6 MB)
Fonte: viralpatel.net – Viral Patel
Publicado em Java, Java Web, Struts, Struts2, Tradução
Etiquetas: 2, application. aplicação, ApplicationResources.properties, basic, basico, beginner, brasil, brazil, brazilian, brazilian portuguese, campo, chave, classpath, client side, começando, convenção, desenvolvendo, desenvolvimento, erro, error, escopo, example, exemplo, Expression Validator, ExpressionValidator, fácil, Field Validators, form, forma simples, formato, formulário, framwork, getting started, Hello World, helloworld, início, iniciante, JAR, jars, java, JavaScript, jsp, lógica, lib, libs, link, logic, não campo, nomenclatura, Non-field validators, passo-a-passo, path, portugues, portuguese, prático, properties, resources, rotinas, s:a, sample, scope, server side, simples, step by step, struts, struts.xml, struts1, struts2, success, sucesso, tag, tags, tipo, trabalhando, tutorial, usando, utilizando, validação, validadores, validate=”true”, validation, validation.xml, validator, validator scope, validator-rules.xml, validators, validators.xml, valor, view, xml, XWork
Parte 2 – Tutorial: Criando uma aplicação Struts 2 no Eclipse
Posted by Gustavo Amaro
Sejam bem-vindos a parte 2 da série de 7 partes onde vamos explorar o mundo do framework Struts 2. No artigo anterior nós passamos pelo básico do Struts2, seu Diagrama de Arquitetura, ciclo de vida do processamento das requisições e uma breve comparação do Struts1 e Struts2. Se você não passou no nosso artigo anterior, eu altamente recomendo você fazer isso antes de botar a mão na massa hoje.
Coisa que nós precisamos
Antes de nós começarmos com nosso primeiro exemplo Hello World no Struts 2, nós vamos precisar de algumas ferramentas.
- JDK 1.5 ou acima (download)
- Tomcat 5.x ou acima ou qualquer outro container (Glassfish, JBoss, Websphere, Weblogic etc) (download)
- Eclipse 3.2.x ou acima (download)
- Arquivos JAR do Apache Struts2. Segue a lista dos arquivos JAR necessários para essa aplicação.
- commons-logging-1.0.4.jar
- freemarker-2.3.8.jar
- ognl-2.6.11.jar
- struts2-core-2.1.6.jar
- xwork-2.1.2.jar
Observe que dependendo da versão utilizada do Struts2, o número da versão dos arquivos JAR acima podem mudar.
Nosso Objetivo
Nosso objetivo é criar uma aplicação básica de Struts2 com uma página de Login. O usuário entrará com a credencial de login(username e senha) e se for autenticado com sucesso ele será redirecionado à uma página de ‘Bem-Vindo’ na qual mostrará a mensagem ” Howdy, <username>…!“. Se o usuário não autenticar, ele será redirecionado de volta para página de login.
Primeiros Passos
Vamos começar com a nosa primeira aplicação baseada em Struts2.
Abra o Eclipse e vá em File -> New -> Project e selecione Dynamic Web Project na tela New Project.
Após selecionar Dynamic Web Project, pressione Next.
Digite o nome do projeto. Por exemplo StrutsHelloWorld. Uma vez que fez isso, selecione o target runtime environment (ex.: Apache Tomcat v6.0). Isso é pra rodar o projeto dentro do ambiente do eclipse. Depois disso clique em Finish.
Uma vez que o projeto está criado, você pode ver essa estrutura no Project Explorer.
Agora copie todos os arquivos JAR requeridos no pasta WebContent -> WEB-INF -> lib. Crie essa pasta se ela não existir.
Mapeamento o Struts2 no WEB.xml
Como discutido no artigo anterior, o ponto de entrada da aplicação Struts2 será definir o Filter no web.xml. Daqui nós definiremos uma entrada da classe org.apache.struts2.dispatcher.FilterDispatcher no web.xml.
Abra o arquivo web.xml que está abaixo da pasta WEB-INF e copie e cole o seguinte código.
<?xml version="1.0" encoding="UTF-8"?>
|
O código acima no web.xml mapeará o filtro do Struts2 com a url /*. O mapeamento padrão de url para aplicação struts2 será /*.action. Também observe que nós temos que definir Login.jsp
como arquivo de boas-vindas.
Observação: O filtro FilterDispatcher
está depreciado desde a versão 2.1.3 do Struts. Se você está utilizando a última versão do Struts2 ( > 2.1.3) utilize a classe StrutsPrepareAndExecuteFilter
em vez disso.
<filter>
|
A classe Action
Precisaremos de uma classe Action que irá autenticar nosso usuário e manterá o valor do username e da senha. Para isso vamos criar um pacote net.viralpatel.struts2 na pasta source. Esse pacote conterá o arquivo action.
Crie uma classe chamada LoginAction no pacote net.viralpatel.struts2 com o seguinte conteudo.
package net.viralpatel.struts2;
|
Observe que, a classe action acima contém dois campos, username e senha qual manterá os valores do formulário e também contem o método execute()
que autenticará o usuário. Neste simples exemplo, nós vamos checar se o username admin é e a senha é admin123.
Também observe que diferente da classe Action no Struts1, a classe Action do Struts2 é uma simples classe POJO com os atributos necessários e método.
O método execute()
retorna um valor String qual irá determinar a página de resultado. Também, no Struts2 o nome do método não é fixo. Neste exemplo nós devemos definir o método execute(). Você pode querer definir um método authenticate() em vez disso.
O ResourceBundle
ResourceBundle é uma entidade Java muito útil que ajuda a colocar o conteúdo estático fora do arquivo fonte. A maioria das aplicações definem um arquivo resource bundle como ApplicationResources.properties o qual conterá mensagens estáticas como Username e Senha e inclui isso com a aplicação.
ResourceBundle se torna útil quando nós queremos adicionar suporte a internacionalização(I18N) a uma aplicação.
Nós definiremos um arquivo ApplicationResources.properties para nossa aplicação. Esse arquivo de propriedade deve estar presente na pasta WEB-INF/classes quando a fonte for compilada. Portanto criaremos uma pasta source chamada resources e colocar esse arquivo ApplicationResources.properties dentro dela.
Para criar uma pasta source, clique com o botão direito no seu projeto no Project Explorer e selecione New -> Source Folder.
Especifique o nome da pasta como resources e clique em Finish.
Crie um arquivo ApplicationResources.properties embaixo da pasta resources.
Copie o sequinte conteúdo dentro do ApplicationResources.properties.
label.username= Username
|
O JSP
Nós vamos criar dois arquivos JSP para renderizar a saída ao usuário. Login.jsp será o ponto de partida da nossa aplicação, no qual conterá um simples formulário de login com username e senha. Em uma autenticação bem sucedida, o usuário será redirecionado à Welcome.jsp que irá mostrar uma simples mensagem de boas vindas.
Crie dois arquivos JSP Login.jsp e Welcome.jsp na pasta WebContent do seu projeto. Copie o seguinte conteúdo dentro deles.
Login.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
|
Welcome.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
|
Observe que nós usamos a tag <s:> do Struts 2 para renderizar as caixas de texto e labels. Struts2 vem com uma ponderosa biblioteca de tags embutida para renderizar elementos UI com mais eficiência.
O arquivo struts.xml
O Struts2 lê a configuração e a definição de classe de um arquivo XML chamado struts.xml. Esse arquivo é carregado do classpath do projeto. Nós definiremos o arquivo struts.xml na pasta resources. Crie o arquivo struts.xml na pasta resources.
Copie o seguinte conteúdo dentro do struts.xml.
<?xml version="1.0" encoding="UTF-8" ?>
|
Observe que no arquivo de configuração acima, nós temos definido a action Login da nossa aplicação. Dois result paths (caminhos de resultado) estão mapeados com LoginAction dependendo do resultado do método execute(.
Se o método execute()
retornar sucesso, o usuário será redirecionado para Welcome.jsp se não para Login.jsp.
Também observe que uma Constant é especificada com o nome struts.custom.i18n.resources. Essa constante especifica o arquivo resource bundle que nós criamos nos passos acima. Nós apenas precisamos especificar o nome do arquivo resource bundle sem a extensão (ApplicationResources sem o .properties).
Nosso LoginAction contém o método execute() o qual é o método padrão sendo chamado pelo Struts2. Se o nome do método é diferente, ex.: authenticate(); então devemos especificar o nome do método na tag <action>.
<action name="login" method="authenticate"
|
Quase pronto
A aplicação está quase pronta. Você talvez queira rodar a aplicação agora e ver o resultado você mesmo. Eu presumo que você já tenha configurado o Tomcat no eclipse. Tudo que você precisa fazer:
Abrir a view de Server em Windows -> Show View -> Server. Botão direito nesta view e selecionar New -> Server e adicionar os detalhes do seu servidor.
Para rodar o projeto, botão direito no nome do projeto no Project Explorer e selecione Run as -> Run on Server (Atalho: Alt+Shift+X, R)
Mas ai tem um pequeno problema. Nossa aplicação roda perfeitamente bem até este ponto. Mas então o usuário entra com as credenciais erradas, ela será redirecionada para página de Login. Mas nenhuma mensagem de erro é mostrada. O usuário não sabe oque aconteceu. Uma boa aplicação sempre mostrará mensagens de erro apropriadas ao usuário. Então nós devemos mostrar uma mensagem de erro Invalid Username/Password. Please try again quando a autenticação do usuário falhar.
Toque final
Para adicionar essa funcionalidade, primeiro nós vamos adicionar a mensagem de erro no nosso arquivo ResourceBundle. Abra o ApplicationResources.properties e adicione uma entrada para error.login. O ApplicationResources.properties final parecerá como:
label.username= Username
|
Nós também precisamos adicionar lógica no LoginAction para adicionar a mensagem de erro se o usuário não autenticar. Mas ai nós temos um problema. Nossa mensagem de erro está especificada no arquivo ApplicationResources.properties. Nós precisamos especificar a chave error.login no LoginAction e a mensagem deverá aparecer na página JSP.
Para isso nós precisamos implementar a interface com.opensymphony.xwork2.TextProvider
que fornece o método getText()
. Esse método retorna um valor String do arquivo resource bundle. Nós precisamos apenas passar o valor chave como argumento para o método getText(). A interface TextProvider define vários métodos que nós precisamos implementar a fim de conseguir segurar o método getText(). Mas nós não queremos estragar o nosso código adicionando todos esses métodos que não temos a intenção de usar. Tem um bom jeito de lidar com este problema.
Struts2 vem com uma classe muito útil com.opensymphony.xwork2.ActionSupport
. Nós precisamos estender nossa classe LoginAction com esta classe e diretamente usar métodos como o getText(), addActionErrors() e etc. Portanto nós iremos estender a classe LoginAction com a classe ActionSupport e adicionar a lógica para reportar o erro dentro dela. O código final do LoginAction deve se parecer com:
package net.viralpatel.struts2;
|
E é isso. Nossa primeira aplicação Hello World em Struts2 está pronta.
Isso é tudo pessoal
Execute a aplicação no eclipse e rode-o no seu navegador favorito.
Página de Login
Página de boas vindas
Página de Login com erro
Download do código fonte
Código fonte sem os arquivos JAR (9 KB)
Código fonte com os arquivos JAR (3 MB)
Fonte: viralpatel.net – Viral Patel
Publicado em Java, Java Web, Struts, Struts2
Etiquetas: ActionSupport, addActionErrors, basic, basico, beginner, brasil, brazil, brazilian, brazilian portuguese, classes, começando, desenvolvendo, desenvolvimento, dojo, Dynamic Web Project, Eclipse, example, execute, fácil, FilterDispatcher, forma simples, framework, getText, glassfish, Hello World, I18N, início, iniciante, internacionalização, JAR, java, java web, JBoss, lib, libs, método, method, passo-a-passo, POJO, portugues, portuguese, prático, projeto, properties, ResourceBundle, sample, simples, struts, struts 1, struts.custom.i18n.resources, struts1, struts2, StrutsPrepareAndExecuteFilter, tag, tags, TextProvider, trabalhando, tutorial, usando, utilizando, viral patel, WEB-INF, WEB.xml, WebContent, Weblogic, Websphere, xml