Java para Web com Struts
Danilo Toshiaki Sato
[email protected]
Treinamento ALESP – SPL
Módulo III
Agenda - Módulo III
1. Recapitulando...
2. Construindo a View
1.
2.
3.
4.
Internacionalização
TagLibs
Struts Validator
Struts Tiles
3. Configurando o Struts
1. web.xml
2. struts-config.xml
4. Considerações sobre o SPL
Copyleft 2006 Danilo Sato
2
Recapitulando...
 Fluxo Básico de Controle
View
Config
Copyleft 2006 Danilo Sato
3
Construindo a View
 Suporte à Internacionalização (i18n):
 No Struts, o suporte é limitado à apresentação
de conteúdo internacionalizado
 Internacionalização na entrada de dados fica a
cargo do cliente (navegador)
 Aplicações na web podem ser acessadas
por pessoas de diversos países
 Internacionalização permite que a aplicação
seja localizada para cada usuário:




Língua
Formato de data
Formato numérico
Formato monetário
Copyleft 2006 Danilo Sato
4
Construindo a View
 Conceitos principais:
 Locale: Classe Java que representa uma escolha
de localização (país e língua – en_US)
 ResourceBundle: Classe Java para prover recursos
localizados
 MessageFormat: Classe Java que permite a
definição de mensagens parametrizadas (Ex:
“Valor máximo: {0}”)
 MessageResources: Classe do Struts para obter
mensagens localizadas de ResourceBundles, num
Locale diferente do padrão no servidor
Copyleft 2006 Danilo Sato
5
Construindo a View
 Um ResourceBundle é um
mapeamento chave (String)  valor
(Object)
 PropertyResourceBundle: uma
subclasse de ResourceBundle para
representar localização de mensagens
(String) definidas num arquivo de
propriedades
 Sintaxe: “nome=valor”
Copyleft 2006 Danilo Sato
6
Construindo a View
 Para criar conteúdo localizado no Struts:
1. Crie os arquivos de propriedades para cada
localização do ResourceBundle
2. Coloque os arquivos de propriedades no
classpath da aplicação web (WEBINF/classes/diretórios_do_pacote)
3. Configurar os parâmetros de
internacionalização na configuração do
ActionServlet (web.xml)
4. Utilizar as taglibs do Struts para exibição de
mensagens e conteúdo localizado no JSP
Copyleft 2006 Danilo Sato
7
Construindo a View
1. MeusRecursos.properties
erro.usuario.invalido=Usuário inválido
erro.nome.invalido=Nome deve ter no máximo 10 caracteres
msg.nome=Nome
msg.login=Login
msg.login.sucesso=Login efetuado com sucesso
Meus Recursos_en.properties
erro.usuario.invalido=Invalid user
erro.nome.invalido=Maximum length of name is 10
msg.nome=Name
msg.login=Login
msg.login.sucesso=Login successfull
Copyleft 2006 Danilo Sato
8
Construindo a View
2.
Salvar os arquivos no diretório WEB-INF/classes/app
3.
Configurar os parâmetros locale e application no
web.xml (ou <message-resources> no strutsconfig.xml para o Struts 1.1)
<servlet (... Configurações do ActionServlet)>
<init-param>
<param-name>application</param-name>
<param-value>app.MeusRecursos</param-value>
</init-param>
<init-param>
<param-name>locale</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
Copyleft 2006 Danilo Sato
9
Construindo a View
4. Utilizando as taglibs para localização:
<%@ taglib uri="/tags/struts-html" prefix="html"%>
<%@ taglib uri="/tags/struts-bean" prefix="bean"%>
<html:html>
<html:form action="login.do">
<bean:message key="msg.nome"/>:
<html:text property="nome"/><br>
<html:submit>
<bean:message key="msg.login"/>
</html:submit>
</html:form>
<html:errors/>
</html:html>
Copyleft 2006 Danilo Sato
10
Construindo a View
 Interação com os ActionForms:
 Geralmente é preciso lidar com
formulários HTML para entrada de dados
 O Struts fornece o ActionForm para
representar um formulário HTML
 Ao montar a página HTML usando tags
como <input> queremos evitar que o
usuário tenha que preencher todo o
formulário no caso de um erro
 Solução: Taglibs do Struts
Copyleft 2006 Danilo Sato
11
Construindo a View
 TagLibs: Tags personalizadas que podem
ser utilizadas na construção do JSP
 Sintaxe parecida com HTML: facilita leitura
e visualização do código JSP
 Struts disponibiliza três TagLibs principais:
 bean: Útil para acessar JavaBeans e suas
propriedades
 html: Útil para construção de formulários HTML
e interação com os componentes do Struts
 logic: Útil para controle de fluxo na
apresentação (condicionais, loops, ...)
Copyleft 2006 Danilo Sato
12
Construindo a View
 Instalando as taglibs do Struts:
1. Instalar os arquivos JAR e TLD:




WEB-INF\lib\struts.jar
WEB-INF\struts-bean.tld
WEB-INF\struts-html.tld
WEB-INF\struts-logic.tld
2. Configurar as taglibs no web.xml
3. Importar as taglibs no JSP para
utilização
Copyleft 2006 Danilo Sato
13
Construindo a View
 web.xml:
<taglib>
<taglib-uri>/tags/struts-bean</taglib-uri>
<taglib-location>
/WEB-INF/struts-bean.tld
</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-html</taglib-uri>
<taglib-location>
/WEB-INF/struts-html.tld
</taglib-location>
</taglib>
(...)
Copyleft 2006 Danilo Sato
14
Construindo a View
 Importando no JSP:
<%@ taglib uri="/tags/struts-html" prefix="html"%>
<%@ taglib uri="/tags/struts-bean" prefix="bean"%>
<%@ taglib uri="/tags/struts-logic" prefix="logic"%>
 Utilização:
<bean:write name="meuForm" property="nome"/>
 Consulte a documentação online para
descrições completas das tags do
Struts e suas propriedades
Copyleft 2006 Danilo Sato
15
Construindo a View
 Propriedades comuns das tags Struts:
 id: nomeia uma variável que será criada no
escopo de página
 name: Nome para encontrar o JavaBean
existente no escopo especificado
 scope: Escopo para buscar o JavaBean (ordem
padrão: page, request, session, application)
 property: Nome da propriedade do JavaBean
cujo valor será recuperado
<logic:iterate scope="request" name="resultado"
property="colecao" id="linha"> (...) </logic:iterate>
Copyleft 2006 Danilo Sato
16
Construindo a View
 Taglib: bean
 message: Apresenta uma mensagem
internacionalizada
 parameter: Define uma variável (escopo page)
com base no valor do parâmetro especificado
 write: Apresenta o valor da propriedade do
componente especificado
 define: Define uma variável com base no valor
da propriedade do componente especificado
 cookie, header, struts, include, ...
 Apenas message e struts estão ligadas ao
framework Struts
Copyleft 2006 Danilo Sato
17
Construindo a View
 Taglib: html
 form: <form>
 button,cancel,checkbox,file,hidden
,image,password,radio,reset,submit
,text,textarea: <input type="...">
 select,option: <select> e <option>
 link: <a>
 img: <img>
 errors: exibe um conjunto de
mensagens de erro
Copyleft 2006 Danilo Sato
18
Construindo a View
 Taglib: logic
 Tags de avaliação: para testar se valores são
iguais, menores que, maiores que, vazios ou
se estão presentes (Ex: <logic:equal>)
 Tags de controle: para redirecionar o fluxo
(<logic:forward> e <logic:redirect>)
 Tags de repetição: para iteração em
coleções (<logic:iterate>)
 Tags logic podem ser utilizadas fora
do framework Struts
Copyleft 2006 Danilo Sato
19
Construindo a View
 Validação:
 Os elementos HTML aceitam qualquer
valor digitado pelo usuário
 Validação com JavaScript pode ser
desabilitada pelo usuário
 Recomendação: Efetuar validação no
cliente (resposta mais rápida) e
também no servidor (caso o JavaScript
esteja desabilitado)
Copyleft 2006 Danilo Sato
20
Construindo a View
 Precisamos de validações para:
 Campos obrigatórios
 Verificar se um valor encaixa-se na faixa de
valores esperados
 Verificar se um valor segue um padrão esperado
 Verificar um formulário inteiro de uma só vez e
retornar uma lista de mensagens
 Comparar valores entre campos
 Retornar os dados originais para correção
 Exibir mensagens localizadas quando necessário
 Executar validações no lado do servidor se
JavaScript está desabilitado
Copyleft 2006 Danilo Sato
21
Construindo a View
 Struts Validator:
 Baseado no Jakarta Commons Validator
 Extrai regras de validação do código Java e
do HTML
 Suporte à internacionalização de mensagens
 Configurado em arquivos XML
 Regras de validação para tipos básicos já
são parte do arcabouço
 Suporte à validação no cliente e no servidor
 Permite a criação de regras customizadas
Copyleft 2006 Danilo Sato
22
Construindo a View
 Componentes do Struts Validator:
 Validadores: para lidar com tipos básicos
 ResourceBundle: compartilhado com o
Struts
 Arquivos de configuração XML
 Tag JSP: para incluir validações
JavaScript na página
 ValidatorForm
 ValidatorActionForm
Copyleft 2006 Danilo Sato
23
Construindo a View
 Adicionando validação automática:
1. O Form deve estender
org.apache.struts.validator.ValidatorFor
m ou
org.apache.struts.validator.ValidatorAct
ionForm
2. O JSP deve incluir a tag <html:javascript>
para validação JavaScript
3. Definir as validações da sua aplicação no
arquivo validator.xml
4. Ligar o plug-in to Struts Validator no arquivo
struts-config.xml
Copyleft 2006 Danilo Sato
24
Construindo a View
 Diferença entre ValidatorForm e
ValidatorActionForm:
 ValidatorForm: O nome declarado no
validator.xml deve ser o mesmo do Form
correspondente, como definido no atributo name
do struts-config.xml
 ValidatorActionForm: O nome declarado no
validator.xml deve ser o mesmo do Action
correspondente, como definido no atributo path
do struts-config.xml
 Você ainda pode sobrescrever o método
validate(), se achar necessário:
 Basta chamar super.validate() no início do
método
Copyleft 2006 Danilo Sato
25
Construindo a View
 Validadores básicos:
 required: campo obrigatório
 mask: campo deve ser aceito pela expressão regular
definida
 range: campo pertence a um intervalo
 maxLength: tamanho máximo do campo
 minLength: tamanho mínimo do campo
 byte,short,integer,long,float,double: campo
deve ser convertido para o tipo especificado
 date: campo deve representar uma data válida
 creditCard: campo deve ser um valor válido de
cartão de crédito
 email: campo deve ser um endereço válido de e-mail
Copyleft 2006 Danilo Sato
26
Construindo a View
 Exemplo: validator.xml
<formset>
<form name="meuForm">
<field property="nome"
depends="required,minlength">
<arg0 key="msg.nome"/>
<var>
<var-name>minlength</var-name>
<var-value>1</var-value>
</var>
</field>
</form>
</formset>
Copyleft 2006 Danilo Sato
27
Construindo a View
 Exemplo: JSP
<%-- definições de taglibs ... --%>
<html:html>
<html:form action="login.do"
onsubmit="validateMeuForm(this)">
<bean:message key="msg.nome"/>:
<html:text property="nome"/><br>
<html:submit>
<bean:message key="msg.login"/>
</html:submit>
</html:form>
<html:errors/>
<html:javascript formName="meuForm"/>
</html:html>
Copyleft 2006 Danilo Sato
28
Construindo a View
 Exemplo: struts-config.xml
<!-- Definição do Plugin do Validator -->
<plug-in
className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEBINF/validator.xml"/>
</plug-in>
Copyleft 2006 Danilo Sato
29
Construindo a View
 Struts Tiles:
 Componente para definição de templates
para as páginas web
 Uso comum para separar: cabeçalhos,
rodapés, menus, ...
 É um plugin do Struts com um
RequestProcessor especializado para o
processamento dos templates
 Definições de template ficam centralizadas
no arquivo tiles-defs.xml
 Inclusão nos JSP através de uma taglib
<tiles>
Copyleft 2006 Danilo Sato
30
Construindo a View
 Exemplo: layout.jsp
<%@ taglib uri="/tags/struts-tiles" prefix="tiles"%>
<html>
<body>
<tiles:insert attribute="body"/>
</body>
</html>
 index.jsp
<h1>Título da página principal</h1>
Copyleft 2006 Danilo Sato
31
Construindo a View
 Exemplo: tiles-defs.xml
<tiles-definitions>
<definition name="layout" path="/layout/layout.jsp">
<put name="body" value=""/>
</definition>
<definition name="homepage" extends="layout">
<put name="body" value="/index.jsp"/>
</definition>
<tiles-definitions>
Copyleft 2006 Danilo Sato
32
Construindo a View
 Exemplo: struts-config.xml
<!-- Definição do Plugin do Tiles -->
<plug-in
className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config"
value="/WEB-INF/tiles-defs.xml"/>
</plug-in>
(...)
<!-- Definição dos ActionMappings -->
<action path="/index"
type="org.apache.struts.actions.ForwardAction"
parameter="homepage"/>
(...)
Copyleft 2006 Danilo Sato
33
Configurando o Struts
 Para redirecionar as requisições HTTP
para o Struts, o contêiner deve
conhecer o ActionServlet
 Como todo Servlet, o ActionServlet é
configurado no arquivo: WEBINF/web.xml
 Além das configurações do
ActionServlet e seus mapeamentos,
você precisa configurar as taglibs do
Struts
Copyleft 2006 Danilo Sato
34
Configurando o Struts
 web.xml
<!-- Configuração do ActionServlet -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>
/WEB-INF/struts-config.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Copyleft 2006 Danilo Sato
35
Configurando o Struts
 web.xml
<!-- Redireciona requisições para o ActionServlet -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- Configuração das taglibs -->
<taglib>
<taglib-uri>/tags/struts-bean</taglib-uri>
<taglib-location>
/WEB-INF/struts-bean.tld
</taglib-location>
</taglib>
(...)
Copyleft 2006 Danilo Sato
36
Configurando o Struts
 As principais configurações do Struts
ficam no arquivo struts-config.xml
 Esqueleto do arquivo:
<struts-config>
<data-sources>...</data-sources>
<form-beans>...<form-beans>
<global-exceptions>...<global-exceptions>
<global-forwards>...<global-forwards>
<action-mappings>...<action-mappings>
<controller>...</controller>
<message-resources>...</message-resources>
<plug-in>...<plug-in>
</struts-config>
Copyleft 2006 Danilo Sato
37
Configurando o Struts
 DataSources: recurso JDBC para conexão
com banco de dados
 Geralmente representam um pool de
conexões SQL
 Estrutura básica de configuração:
<data-sources>
<data-source>
<set-property name="${ }" value="${ }"/>
<set-property name="${ }" value="${ }"/>
...
</data-source>
</data-sources>
Copyleft 2006 Danilo Sato
38
Configurando o Struts
 ActionForm e DynaActionForm são definidos
na tag <form-beans>
 Veja “Construindo o Model” para detalhes
sobre esse elemento
 Estrutura básica de configuração:
<form-beans>
<form-bean name="${ }" value="${ }">
<form-property name="${ }" value="${ }"/>
<form-property name="${ }" value="${ }"/>
...
</form-bean>
</form-beans>
Copyleft 2006 Danilo Sato
39
Configurando o Struts
 Para tratamento declarativo de erros
globais, utilize a tag <global-exceptions>
 Veja “Construindo o Controller” para
detalhes sobre esse elemento
 Estrutura básica de configuração:
<global-exceptions>
<exception type="${ }"
key="${ }"
path="${ }"/>
...
</global-exceptions>
Copyleft 2006 Danilo Sato
40
Configurando o Struts
 Para definição de encaminhamentos
globais, utilize a tag <global-forwards>
 Veja “Construindo o Controller” para
detalhes sobre esse elemento
 Estrutura básica de configuração:
<global-forwards>
<forward name="${ }"
path="${ }"
redirect="${ }"/>
...
</global-forwards>
Copyleft 2006 Danilo Sato
41
Configurando o Struts
 Para definição de ActionMappings, utilize a tag
<action-mappings>
 Veja “Construindo o Controller” para detalhes
sobre esse elemento
 Estrutura básica de configuração:
<action-mappings>
<action path="${ }" type="${ }" name="${ }"
scope="${ }" validate="${ }" input="${ }">
<forward name="${ }" path="${ }"/>
<exception type="${ }" key="${ }" path="${ }"/>
</action>
...
</action-mappings>
Copyleft 2006 Danilo Sato
42
Configurando o Struts
 Para configurações do ActionServlet, utilize
a tag <controller>
 Alguns dos parâmetros antes definidos no
web.xml foram migrados para o
<controller> no Struts 1.1
 Estrutura básica de configuração:
<controller processorClass="${ }"
debug="${ }"
contentType="${ }"
.../>
Copyleft 2006 Danilo Sato
43
Configurando o Struts
 Para configurações do ResourceBundle para
internacionalização da aplicação web,
utilize a tag <controller>
 Definido no parâmetro application do
web.xml no Struts 1.0
 Estrutura básica de configuração:
<message-resources
parameter="${ }"
null="${ }"
.../>
Copyleft 2006 Danilo Sato
44
Configurando o Struts
 Para configurações de Plug-ins como o
Struts Validator e o Struts Tiles, utilize a
tag <plug-in>
 Veja “Construindo a View” para detalhes sobre
esse elemento
 Estrutura básica de configuração:
<plug-in classname="${ }">
<set-property property="${ }" value="${ }"/>
<set-property property="${ }" value="${ }"/>
...
</plugin>
Copyleft 2006 Danilo Sato
45
Considerações sobre o SPL
 Alguns sintomas observados:
 Muito código scriptlet no JSP
 Código mal-estruturado (muitas classes
no mesmo pacote, JSPs misturados, ...)
 Código de validação espalhado e
inconsistente (alguns JSPs usam
JavaScript, outros não, algumas classes
efetuam validação, outras não)
 Arquivo de configuração muito extenso e
difícil de ler
Copyleft 2006 Danilo Sato
46
Considerações sobre o SPL
 Sugestões:
 Utilizar melhor as taglibs do Struts nos JSPs
 Mover código de controle para uma ou mais
Actions
 Separar a aplicação em módulos para:
 Facilitar a estruturação das classes em pacotes
bem definidos
 Facilitar a estruturação e leitura do arquivo de
configuração
 Utilizar o Struts Validator para código de
validação
Copyleft 2006 Danilo Sato
47
Dúvidas ou Sugestões?
Copyleft 2006 Danilo Sato
48
Download

Struts-III-ALESP