• Nenhum resultado encontrado

if992 14 Topicos Avancados no Framework Struts

N/A
N/A
Protected

Academic year: 2021

Share "if992 14 Topicos Avancados no Framework Struts"

Copied!
43
0
0

Texto

(1)

Tópicos  avançados  no  

Framework  Struts  

Sistemas  de  Informação  

Prof.  Vinicius  Cardoso  Garcia  

vcg@cin.ufpe.br  

(2)

Licença  do  Material  

Este  Trabalho  foi  licenciado  com  uma  

Licença  

CreaIve  Commons  -­‐  

Atribuição-­‐NãoComercial-­‐

ComparIlhaIgual  3.0  Não  Adaptada

.  

 

Mais  informações  visite  

(3)

Referências  

• 

Notas  de  aula  baseadas  no  material  do  curso:  

Programação  Web

,  Módulo  6,  versão  1.0  –  Novembro/

2007  

– 

JEDI:  Java  Educa>on  &  Development  Ini>a>ve  (DFJUG-­‐

BRASIL)  

• 

HALL,  Marty.  

Core  Servlets  and  Java  Server  Pages

,  

Pren>ce  Hall,  2000  

• 

GOODWILL,  James

.  Mastering  Jakarta  Struts

,  Wiley,  

2002  

• 

Paul  Deitel  e  Harvey  Deitel.  

Java  -­‐  Como  Programar  -­‐  

8ª  Edição

.  Pren>ce  Hall  -­‐  Br,  2010.  

(4)

LogísIca  

•  Apresentação do professor

•  Material

•  Dúvidas? Interrompam a

vontade...

•  Celulares silenciosos

•  Exercício

(5)

Warm  up  

•  Na  aulaanterior,  trabalhamos  com  o  básico  do  framework  Struts.     •  Aprendemos  como  incluir  o  framework  Struts  em  nossa  aplicação  

configurando  o  Ac>onServlet  para  manipular  as  requisições.    

•  Também  aprendemos  como  criar  instâncias  de  classes  Ac>on  que   servem  como  manipuladores  de  ações  para  submissões  de  forms  e   outras  requisições  de  usuário.    

•  Vimos  como  criar  classes  Ac>onForm  que  oferecem  uma  maneira   fácil  de  transferir  dados  de  forms  para  os  Ac>onHandlers  

apropriados.    

•  Finalmente,  vimos  como  usar  as  bibliotecas  de  tag  incluídas  a  fim   de  auxiliar  na  junção  dos  forms  HTML  às  páginas  JSP  dentro  do   framework.  

(6)

ObjeIvos  

• 

Ao  final  desta  aula,  o  estudante  será  capaz  de:  

– 

Usar  os  DynaAc>onForms  para  minimizar  o  

número  de  classes  que  precisamos  desenvolver  

– 

Prover  validação  do  lado  servidor  em  nossa  

aplicação  com  o  framework  Validator  

– 

Compar>mentalizar  a  camada  de  apresentação  

com  o  framework  Tiles

 

(7)

O  Que  veremos?  

• 

DynaAc>onForms  

• 

Validadores  

• 

Pacote  de  Recursos  

(8)

DynaAcIonForms  

•  Funciona  exatamente  igual  ao  Ac>onForms  

•  Uma  instância  pode  ser  ob>da  e  seus  métodos  chamados  por   Ac>on  handlers  

•  A  principal  diferença  é  que  cada  DynaAc>onForm  não  é  definido  ou   declarado  com  uma  classe  separada  

•  Configurado  dentro  do  arquivo  struts-­‐config.xml  

•  Criar  DynaAc>onForm  é  mais  simples  e  rápido  do  que  codificar  uma   instância  completa  de  um  Ac>onForm  

•  Não  é  necessário  listar  todas  as  propriedades  do  formulário  e  criar   os  métodos  get  e  set  para  cada  uma  delas  

•  Declarar  o  nome  e  >po  da  propriedade  

•  E  responsabilidade  do  framework  prover  uma  instância  de  trabalho   baseado  nas  informações  

(9)
(10)

<?xml version="1.0"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/ struts/dtds/struts- config_1_1.dtd"> <struts-config> <form-beans> <form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm”>

<form-property name="loginName" type="java.lang.String"/> <form-property name="password" type="java.lang.String"/> </form-bean> </form-beans> <action-mappings> <action name="loginForm" path="/login" scope="request" type="action.LoginAction">

<forward name="success" path="/success.jsp"/> <forward name="failure" path="/failure.jsp"/> </action>

</action-mappings> </struts-config>

(11)

DynaAcIonForms  

•  São  os  seguintes  os  >pos  Java  suportados  pelo  DynaAc>onForm:    

–  java.lang.BigDecimal   –  java.lang.BigInteger  

–  boolean  e  java.lang.Boolean   –  char  e  java.lang.Character   –  double  e  java.lang.Double   –  float  e  java.lang.Float  

–  int  e  java.lang.Integer   –  long  e  java.lang.Long   –  short  e  java.lang.Short   –  java.lang.String  

–  java.lang.Date   –  java.lang.Time  

(12)

DynaAcIonForms  

• 

Mais  conveniente,  mas  não  é  sempre  a  

melhor  solução  

• 

Existem  ainda  situações  onde  usar  

Ac>onForms  é  mais  apropriado:  

– 

DynaAc>onForms  suporta  apenas  um  

conjunto  limitado  de  >pos  Java  

– DynaAc>onForms  não  suporta  o  conceito  

de  herança  

(13)

Validadores  

• 

Validação  

– 

Valida  o  formato  e  o  conteúdo  dos  valores  fornecido  

pelo  usuário  

– 

Uma  tarefa  que  deve  ser  realizada  para  toda  entrada  de  

dados  

• 

Framework  provido  pelo  Struts  para  aliviar  a  vida  do  

desenvolvedor  que  teria  que  fazer  a  validação  

• 

Vantagens:  

– 

Prove  várias  regras  de  validação  pré-­‐definidas  

– 

Elimina  redundância  no  código  de  validação  

– 

Prove  ponto  único  de  manutenção  

(14)

Validadores  

• 

Passos  requeridos  para  inclusão  da  

funcionalidade  de  Validadores  dentro  de  

aplicações  Struts  já  existentes:  

– 

Configure  o  plug-­‐in  Validator  

– 

 Declare  os  formulários  requerendo  validação  

– 

Crie  as  mensagens  mostradas  no  caso  de  

falha  da  validação  

– 

Modifique  o  arquivo  struts-­‐config  para  a>var  

a  validação  automá>ca  

(15)
(16)

validator-­‐rules.xml  

• 

Define  as  classes  que  implementam  o  código  de  validação  

• 

O  framework  vem  com  um  cópia  deste  arquivo  com  classes  

de  validação  pré-­‐definidas  já  configuradas  

• 

Nomes  lógicos  dos  validades  que  são  entregues  dentro  do  

framework  

–  required  –  propriedades  marcadas  como  required  devem  ter  ao  

menos  um  caractere.  

–  mask  –  propriedades  sujeitas  ao  validador  de  máscara  devem  

combinar  com  a  expressão  regular  que  submetemos  usando  o   parâmetro  mask.  

–  minlength  –  se  aplicado  a  uma  propriedade,  deve  ter  um  tamanho  

igual  ou  maior  que  o  valor  do  parâmetro  min  que  passamos.  

–  maxlength  -­‐  se  aplicado  a  uma  propriedade,  deve  ter  um  tamanho  

(17)

validator-­‐rules.xml  

range  

–  a  propriedade  deve  estar  entre  os  valores  

fornecidos  através  dos  parâmetros  min  e  max.  

byte,  short,  integer,  long,  float,  double  

–  a  propriedade  

deve  poder  ser  conver>da  para  o  >po  de  dado  primi>vo  

específico.  

date  

–  valida  se  o  valor  da  propriedade  é  uma  data  válida.  

creditCard  

–  valida  se  o  valor  da  propriedade  pode  ser  um  

número  de  cartão  de  crédito  válido.  

email  

–  valida  se  o  valor  da  propriedade  pode  ser  um  

endereço  de  email  válido.  

(18)

validaIon.xml  

• 

Declara  quais  formulários  requerem  

validação  

• 

Declara  quais  regras  de  validação  

devem  ser  implementadas  

• 

O  framework  fornece  a  estrutura  do  

arquivo  

• 

Desenvolvedores  devem  configurar  este  

arquivo  

(19)
(20)

Definindo  o  Pacote  de  Recursos  

• 

O  elemento  <arg0>  define  a  chave  que  necessita  

como  entrada  um  conjunto  de  recursos  

• 

Framework  validator  faz  uso  do  mesmo  conjunto  de  

recursos  que  o  Struts  framework  u>liza  

• 

Pode  ser  encontrado  no  diretório  WEB-­‐INF/classes  

sob  o  nome  Applica>onResources.proper>es  

• 

Exemplo:  

error.loginname.required=Por favor informe seu login error.password.required=Informada senha em branco ou com menos de 4 caracteres

(21)
(22)
(23)
(24)
(25)

LoginAcIon.java  

package action;

import javax.servlet.http.*;

import org.apache.struts.action.*;

public class LoginAction extends Action { @Override

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,

HttpServletResponse response) throws Exception { DynaActionForm dForm = (DynaActionForm) form;

String loginName = (String) dForm.get("loginName"); String password = (String) dForm.get("password");

if (!(loginName.equals(”JACK") && password.equals(”BAUER"))) { return mapping.findForward("failure");

}

HttpSession session = request.getSession(); session.setAttribute("USER", loginName); return mapping.findForward("success"); }

(26)

LoginStruts.jsp  

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %> <html:html> <head> <title>Login Page</title> </head> <body> <h1> Login Page </h1> <br/> <html:form action="/login"> User Name: <html:text property="loginName"/> <html:errors property="loginName"/> <br/> Password: <html:password property="password"/> <html:errors property="password"/> <br/> <html:submit/>

(27)

Tiles  

• 

Permite  a  fácil  definição  de  modelo  

(templates)  e  instâncias  de  telas  as  

quais  podemos  usar  com  nossas  

aplicações  

• 

É  um  modelo  que  pode  ser  reu>lizado  

por  qualquer  página  da  aplicação  

• 

Usar  modelos  permite  a  aplicação  a  

aparência  mais  consistente  e  

(28)
(29)

Modelos  (templates)  

• 

Como  podemos  implementar  um  conjunto  

de  páginas  similares?  

– 

Refatorando  as  en>dades  de  código  

separadas  que  seriam  duplicada  por  todo  

código  da  aplicação  

– 

Usar  modelos  que  definam  o  formato  e  a  

visão  padrão  das  páginas  

– 

Qualquer  mudança  necessária  em  um  dos  

aspectos  da  camada  de  apresentação  seria  

aplicada  a  todas  as  páginas  uma  única  vez  

(30)
(31)
(32)

Construindo  um  Modelo  de  

Layout  

• 

O  primeiro  passo  na  construção  de  uma  modelo  é  

iden>ficar  os  componentes  a  serem  colocados  

Header  

(33)

Construindo  um  Modelo  de  

Layout  

(34)

Criando  definições  de  Tela  

• 

Uma  vez  que  temos  um  modelo,  

podemos  fazer  uso  dele  para  definir  

uma  tela  

• 

A  criação  de  definições  pode  ser  feita  

dentro  do  Tiles  framework  de  duas  

maneiras:  

– 

Definição  usando  páginas  JSP  

– Definição  usando  um  arquivo  de  

configuração  XML  

(35)
(36)

Usando  as  Definições  de  Telas  

• 

Para  colocar  uma  Definição  em  uso,  podemos  

usar  o  tag  <>les:insert>  e  fornecer  a  ele  o  nome  

da  definição  a  ser  mostrada:  

• 

Exemplo:  

<%@ taglib uri="http://jakarta.apache.org/struts/ tags- tiles" prefix="tiles" %>

<tiles:insert beanName="welcomePage" flush="true"/>

• 

Problema:  aumenta  o  número  de  JSPs  

requeridas  para  mostrar  diferentes  telas  para  o  

usuário.  

(37)

Usando  as  Definições  de  Telas  

• 

Melhor  abordagem:  Fazer  uso  das  

definições  como  alvos  dos  

Ac>onForwards  

– 

Pela  inclusão  do  Tiles  framework  como  um  

plugin  do  Struts,  o  Struts  reconhece  as  

definições  de  telas  criadas  usando  o  Tiles  

– Os  nomes  das  telas  podem  ser  usadas  no  

lugar  das  reais  localizações  nos  tags  

<forward>  

(38)
(39)
(40)

Estendendo  as  Definições  de  

Telas  

• 

Funciona  na  maioria  das  vezes  como  a  

herança  de  classes  Java  

• 

Telas  estendida  herda  todas  as  

propriedades  e  atributos  das  telas  pai  

• 

Permite  a  criação  de  uma  definição  de  tela  

base  Vantagens:  

– 

Evitamos  a  repe>ção  das  definições  dos  

valores  dos  atributos  

– 

As  mudanças  são  propagadas  para  todas  as  

telas  

(41)

Estendendo  as  Definições  de  

Telas  

(42)

Revisão  

• 

DynaAc>onForms  

• 

Validadores  

• 

Pacote  de  Recursos  

(43)

AIvidades  

• 

Resolução  da  lista  de  exercícios    

Referências

Documentos relacionados

O mestrando, sob a orientação de um professor orientador do programa e, quando for o caso, um coorientador, deverá desenvolver um projeto de pesquisa, que servirá de base para a

Com isso, estabelecer um parâmetro de família, vedando assim, a liberdade de escolha do homem em seu âmbito particular, é antes de tudo, uma afronta ao princípio da liberdade

A Udesc tem bastante potencial na pesquisa e como o curso da Unisul tem pessoas da mais alta competência realizaremos esta aproximação para que se possa produzir mais pesquisa,

• Nospiediet ikonu (B2), lai ieietu izvēlnē, un pēc tam nospiediet ikonas (B7) un (B8), līdz mašīna uzrāda ziņojumu “ŪDENS CIETĪBA“.. • Nospiediet ikonu

Assim sendo, objetiva-se como produto da pesquisa a elaboração de uma proposta de Plano Museológico para o Museu Antropológico Diretor Pestana, e assim voltar o “olhar”

“À margem das divergências de interpretação sobre cada um dos preceitos legais ou sobre as implicações políticas da reforma trabalhista, que já foram objeto de

Os (as) demais professores (as) apesar de não apresentar uma abordagem específica como ocorre na resposta do (da) professor (a) A, mostraram-se comprometidos com a aprendizagem de

Porém, o principal foco desta pesquisa é investigar como Lacan articulou essa questão nos primeiros anos de seu ensino, e, para tanto, será necessário