A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

O que é? Um framework para facilitar a implementação de uma arquitetura MVC em aplicações web Oferece  Um servlet controlador configurável ( Front Controller.

Apresentações semelhantes


Apresentação em tema: "O que é? Um framework para facilitar a implementação de uma arquitetura MVC em aplicações web Oferece  Um servlet controlador configurável ( Front Controller."— Transcrição da apresentação:

1 O que é? Um framework para facilitar a implementação de uma arquitetura MVC em aplicações web Oferece  Um servlet controlador configurável ( Front Controller ) através de arquivos XML externos, que despacham requisições a classe Action ( Command ) implementados pelo desenvolvedor  Uma vasta coleção de taglibs JSP  Classes ajudantes que oferecem suporte a tratamento de XML, preenchimento de JavaBeans, validação de formulários e gerenciamento externo de conteúdo

2 Componentes Model (M)  Geralmente um objeto java (JavaBean) View (V)  Geralmente uma página HTML ou JSP. Embora o Struts seja independente da camada de apresentação (ex. velstruts) Controller (C)  org.apache.struts.action. ActionServlet ou subclasse

3 Componentes Classes ajudantes  FromBean: Encapsula dados de um formulário HTML (M)  ActionError(s): Encapsula dados de Erros (M) (deprecated 1.2)  ActionMessage(s): Encapsula dados de Mensagens (M)  Custon tags: Encapsulam lógica de apresentação (V)  Actions: implementam lógica comandos (C)  ActionForward: Encapsulam lógica de redirecionamento (C)

4 Como funciona? Componentes-chave:  ActionServlet: despachante de ações  Action: classe estendida por cada ação (comando) a ser implementada ( Command pattern )  struts-config.xml : arquivo onde se definem mapeamentos entre ações, páginas, beans e dados JSP Form Bean Action Servlet Action Dados, Dao ou Session Facade Bean http delega prenche despacha lê

5 Como usar? struts-blank.war  Um template básico para um aplicação web já configurada para usar o struts web.xml action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml...

6 Como usar? web.xml (cont.)... action *.do... /tags/struts-bean /WEB-INF/struts-bean.tld /tags/struts-html /WEB-INF/struts-html.tld...

7 Como usar? struts-config.xml <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">

8 Como usar? struts-config.xml (cont.)... <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>...

9 Entendendo... Index.jsp

10 Actions Implementando a ação cadastrar novo filme package pec; //imports public class CadastrarFilmeAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //código de efetuar cadastro... return mapping.findForward("sucesso"); }

11 Actions Declarando <action path="/cadastrarFilme" type="pec.CadastrarFilmeAction"/> <forward name="sucesso" path="pages/cadastroSucesso.jsp"/>...

12 ActionForm Nossa ação precisa de um formulário  Java bean comum As propriedades do bean são populadas de forma transparente public class CadastroFilmeForm extends ActionForm { private String idRef; private String nomeOriginal; private String nomeNacional; private String numeroCopias; //get´s e set´s }

13 ActionForm ActionFroms podem ser validados package pec; public class CadastroFilmeForm extends ActionForm { //... public ActionErrors validate(ActionMapping mapping, HttpServletRequest response) { ActionErrors validatorErros = new ActionErrors(); if (idRef == null || idRef.trim().equals("")) validatorErros.add("idRef", new ActionMessage( "filme.cadastro.idRef.required")); if (nomeOriginal == null || nomeOriginal.trim().equals("")) validatorErros.add("nomeOriginal", new ActionMessage( "filme.cadastro.nomeOriginal.required")); if (numCopias == null || numCopias.trim().equals("")) validatorErros.add("numCopias", new ActionMessage( "filme.cadastro.numCopias.required")); else if (!GenericValidator.isInt(numCopias)) validatorErros.add("numCopias", new ActionMessage( "filme.cadastro.numCopias.notInt")); return validatorErros; } Commons validator

14 ActionForm Formulário (HTML/JSP) Request recebido pelo controler Chama reset() Guarda o ActionForm no escopo desejado Cria ou recicla um ActionForm Popula ActionForm a partir do request Chama validate() do ActionForm Dá um forward para “sucesso” Chama execute() do Action Dá um forward para o input Formulário (HTML/JSP) Página Sucesso (HTML/JSP) Com menssagens de erro! Validação falha Validação ok

15 ActionForm ActionForm são firewalls dos Actions  O ActionForms só chegam aos actions caso tenham sido validados Cuidado com a definição dos tipos  Se o usuário digita um valor, torne esta propriedade uma String

16 ActionForm Declarando (struts-config.xml)......... <action path="/cadastrarFilme" type="pec.CadastrarFilmeAction" name="cadastroFilmeForm" input="/cadastrarNovoFilme.jsp">...

17 ActionForm De volta ao action... package pec; //imports public class CadastrarFilmeAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { CadastroFilmeForm cadastroForm = (CadastroFilmeForm) form; //código de efetuar cadastro... return mapping.findForward("sucesso"); }  Garantia de validação!

18 ActionForm cadastrarNovoFilme.jsp Cadastrar Filme Cadastrar Filme * *...

19 ActionForm cadastrarNovoFilme.jsp (cont)... *

20 ActionForm MessageResources.properties # -- cadastro filme success -- filme.cadastro.title=Filme Cadastrado filme.cadastro.heading=Sucesso! filme.cadastro.message=Filme Cadastrado com sucesso! # -- cadastro filme form -- filme.cadastro.idRef=Id Ref filme.cadastro.nomeOriginal=Nome Original filme.cadastro.nomeNacional=NomeNacional filme.cadastro.numCopias=Número de Cópias filme.cadastro.idRef.required=Id Ref Requerido filme.cadastro.nomeOriginal.required=Nome Original Requerido filme.cadastro.numCopias.required=Número de Cópias Requerido filme.cadastro.numCopias.notInt=Número de Cópias inválido

21 ActionForm ActionForm também podem ser usados para fornecer dados......... <action path="/verDadosFilme" type="pec.VerDadosFilmeAction" name="filmeForm" scope="request" validate="false">...

22 ActionForm Problemas  Muitos objetos de domínio duplicados  Muito código de cópia de propriedades Usar BeanUtils.copyProperties(Object dest, Object src);  Grande quantidade de Froms com grandes quantidades de propriedades pode ser difícil de manter Usar DynaActionForm?

23 Exceções Struts dá suporte a um tratamento de exceções declarativo  Suponha que o código de negócio de VerDadosFilmeAction lance a exceção pec. FilmeNaoEncontradoException <action path="/verDadosFilme" type="pec.VerDadosFilmeAction" name="filmeForm" scope="request" validate="false"> <exception key="filmeNaoEncontrado.exception" type="pec.FilmeNaoEncontradoException" path="/pages/exception.jsp" />...

24 O que mais? Outros tipos de actions  DispatchAction: quando tempos um formulário que terá mais de uma ação associada Plugins  Struts-Validator  Struts-Tiles

25 Exercícios Implementar o Exercício de Mensagens usando Struts


Carregar ppt "O que é? Um framework para facilitar a implementação de uma arquitetura MVC em aplicações web Oferece  Um servlet controlador configurável ( Front Controller."

Apresentações semelhantes


Anúncios Google