Projeto da interface da aplicação. Padrão composite view

Para a construção das paginas de uma aplicação JavaEE é recomendável a utilização do padrão Compositive view.

Numa aplicação muitas paginas possuem alguns conteúdos diferentes e também alguns conteúdos comuns. Enquanto se navega através das paginas de uma aplicação, os dados e o conteúdo entre as diferentes paginas variam, mas diversos elementos como o topo, o menu e o rodapé permanecem os mesmos. A estrutura e o layout de cada pagina podem ser o mesmo em toda a aplicação e alguns elementos ou secções podem aparecer em muitas páginas diferentes. Quando estes elementos são codificados diretamente nas paginas eles tornam-se difíceis de alterar, são suscetíveis a inconsistências e fica mais difícil alcançar um layout consistente por toda aplicação (Sum mucrosysetem, 2002).

A solução é o recurso ao padrão Composite View que promove a reutilização das partes de uma pagina com a criação de um layou baseado em módulos. Uma estratégia de reutilização em paginas JSP é utilizar a tag (diretiva) .

O padrão Composite View melhora a flexibilidade e a manutenibilidade, promove a reutilização e reduz a duplicação de código(Sun Microsystems 2002). Cria uma visão através da composição de outras visões A tecnologia dos JSP oferece duas soluções para a implementação do padrão Composite View.

Utilizando a inclusão estática, no momento da compilação do servlet Utilizando a inclusão dinâmica, no momento da requisição.

A inclusão estática é a mais eficiente e é indicada quando a estrutura não muda com frequência, o conteúdo pode mudar. Esta estrutura pode compreender Menus, logótipos, avisos de copyright, etc. E é implementada com a diretiva include

Exemplo: %@include file=”menu.jsp”%

Se o conteúdo incluído contiver novos fragmentos, estes serão processados recursivamente.

A inclusão dinâmica é mais lenta. Nesta os fragmentos não são incluídos no servlet mas carregados no momento da requisição e é indicada para blocos cuja estrutura muda com frequência por exemplo o bloco central de uma pagina ou a área de noticias de um portal. Esta inclusão é implementada com a tag .

Na mesma instrução pode-se passar parâmetros em tempo de execução usando a tag no interior.

<jsp: include page =”texto.jsp”>
     <jsp:param name=”data” value=”<%=new Date()%>”>
</jsp:include>

A tecnologia dos JSP compreende muitos outros recursos. Alguns serão vistos posteriormente e muitos outros serão omitidos por não se enquadrarem no escopo do atual ebook.

Framework Bootstrap

Na implementação das paginas da aplicação de exemplo que acompanha o presente ebook será feito recurso ao framework bootstrap.

O Bootstrap é o mais popular framework HTML, CSS, e JS para desenvolvimento de projetos responsivo e focado para dispositivos moveis na web.

O Bootstrap possui uma diversidade de componentes (plugind) em JavaScript(Jquery) que auxiliam o designer a implementar, tootlip, menu-dropdown, modela, carousel, slidshow, entre outro, sem a menor dificuldade, apenas sendo necessário acrescentar algumas configurações no código, mas sem necessidade de criar scripts.

O bootstrap possibilita a criação de layouts responsivos e o uso de grids permite que o seu conteúdo seja organizado em até 12 colunas.

Configuração do bootstrap

O pacote do bootstrap contem três tipos diferentes de ficheiros(Css, JavaScript e Fonts) que vêm devidamente organizados em subpastas.

Para utilizar o bootstrap no projeto é suficiente fazer o download do pacote (http://getbootstrap.com/ ), descompacta-lo e copiar os ficheiros para uma pasta ou pastas do projeto.

Além dos ficheiros do pacote padrão do bootstrap é necessário adicionar o ficheiro do Jquery (https://jquery.com/download/ ) que é necessário para os plugins javascript do bootstrap.

No apêndice são mostrados alguns exemplos de configuração e utilização inicial do framework front-end criado pela equipa do Twiter.

Prototipos do front-end da aplicação de gestão de projetos

A prototipagem é essencial para o processo de produção. Um protótipo busca simular a aparência e funcionalidade do software permitindo que os stakeholders interajam, avaliem, alterem e aprovem as características mais importantes na interface e nas funções.

A interface é o principal canal de comunicação entre o sistema e o utilizador, e é sua função oferecer a melhor experiência possível. A Interface deve dar a utilizar uma mensagem clara e objetiva a fim de atender as suas necessidades sem criar dúvidas. A interface deve ser tratada desde o primeiro momento da conceção de um software. Será ela quem define e exprime a interação do sistema com o utilizador. A programação deve seguir o visual e não o visual seguir a programação.

O tempo gasto na prototipação é inversamente proporcional ao tempo necessário para a programação. Quando mais tempo se dedicar à prototipação, menor será o tempo gasto na sua implementação.

Esta pequena viagem visa motivar à uma prática por pode traduzir-se em ganho nos mais diversos momentos do processo de implementação de uma aplicação.

Para a aplicação em desenvolvimento foram elaborados alguns protótipos utilizando a ferramenta Evalus Pencil (http://pencil.evolus.vn/ ).

Protótipo da home page

Protótipos de alguns formulários

Implementação. Adicionar pagina JSP ao projeto

  1. Fazer clique no botão New File (Novo Ficheiro ) ou fazer clique com o botão direito do mouse sobre o projeto e escolher New(Novo) para abrir o assiste de Ficheiro.

  2. Na secção Categories(Categorias) escolha Web e, em seguida, em File Types(Tipo de ficheiro) escolher JSP e clique em Next(Seguinte).

  1. Na caixa de dialogo que aparece, dar um nome ao ficheiro e escolher uma pasta onde o ficheiro vai ser localizado. E fazer clique em Finish.

Com os ficheiros do Bootstrap e a nova pagina a estrutura do projeto em desenvolvimento será a seguinte:

Pagina JSP gera e ja com a chamada dos ficheiros de configuração do Bootstrap e com o div container mandatário no trabalho com os recursos do framework criado pela equipa do Twiter.

Exemplo de código para a construção de páginas

Pagina projecto_registo.JSP Sem o bootstrap

Para uma imersão progressiva no bootstrap, inicialmente será construído o formulário com o html padrão sem recurso a estilização.

<body>
<form  action="" method="POST">

<label>Código:</label>
<input type="text"  id="codigo_projecto" name="codigo_projecto"/>

<br/>
<label>Nome:</label>
<input type="text" id="nome_projecto" name="nome_projecto"/>
<br/>

<label>Descrição:</label>
<textarea  rows="5" id="descricao_projecto" name="descricao_projecto"></textarea>

<br/>
<label>Custo:</label>              
<input type="text"  id="curso_projecto" name="curso_projecto"/>
<br/>  

<label>Financiador:</label>                  
<input type="text" id="financiador_projecto" name="financiador_projecto"/>
<br/>
 <label>Tipo</label>
<select id="select_tipo_projecto" name="select_tipo_projecto">
 <option></option>
</select>

<br/>
<button type="submit"  >Guardar</button>
<button type="reset" >Limpar</button>

</form>

</body>

Saída

Com bootstrap

A seguir será adicionada à página a estilização padrão do Bootstrap para os formulários. É importante lembrar que o bootstrap recorre à sua grelha para arrumar os componentes dentro de um contentor. A primeira coisa a fazer é adicionar os ficheiros do bootstrap ao projecto e fazer a sua chamada na página.

Ao fazer referencia aos recursos presentes noutras pastas do projeto podem-se usar os pontinhos e barra(../) ou então a expressão <%=request.getContextPath()%>.Esta ultima é a forma mais prática já que apontea sempre para a raiz do projeto. Exemplo

No exemplo serão usadas as duas formas apenas para efeitos de demostração e exemplo.

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Registo de Novo Projecto</title>
        <link href="../css/bootstrap.min.css" rel="stylesheet">
        <link href="<%=request.getContextPath()%>/css/estilos.css" rel="stylesheet">
        <script src="../js/bootstrap.min.js"></script>
        <script src="<%=request.getContextPath()%>/js/jquery-1.12.3.min.js"></script>
    </head>
    <body>
        <div class="container">


            <h3 style="text-align: center">Ficha de Registo de Novo Projecto</h3>
            <br/>


            <form class="form-horizontal" role="form" action="" method="POST">

                <div class="form-group">
                    <label class="col-xs-3 control-label">Código:</label>
                    <div class="col-xs-4">
                        <input type="text" class="form-control" id="codigo_projecto" name="codigo_projecto"/>
                    </div>                   
                </div>

                <div class="form-group">
                    <label class="col-xs-3 control-label">Nome:</label>
                    <div class="col-xs-4">
                        <input type="text" class="form-control" id="nome_projecto" name="nome_projecto"/>
                    </div>                   
                </div>

                <div class="form-group">
                    <label class="col-xs-3 control-label">Descrição:</label>
                    <div class="col-xs-8" >
                        <textarea class="form-control" rows="5" id="descricao_projecto" name="descricao_projecto"></textarea>

                    </div>
                </div>
                <div class="form-group">
                    <label class="col-xs-3 control-label">Custo:</label>
                    <div class="col-xs-5" >
                        <input type="text"  class="form-control" id="curso_projecto" name="curso_projecto"/>
                    </div>
                </div>

                <div class="form-group">
                    <label class="col-xs-3 control-label">Financiador:</label>
                    <div class="col-xs-5" >
                        <input type="text"  class="form-control" id="financiador_projecto" name="financiador_projecto"/>
                    </div>
                </div>

                <div class="form-group">

                    <label class="col-xs-3 control-label">Tipo</label>
                    <div class="col-xs-5" >
                        <select class="form-control" id="select_tipo_projecto" name="select_tipo_projecto">
                            <option></option>

                        </select>

                    </div>
                </div>

                <div class="col-md-4 col-md-offset-2">
                    <button type="submit" class="btn btn-primary" >Guardar</button>
                    <button type="submit" class="btn btn-primary" >Fechar</button>
                </div>
            </form>

        </div>
    </body>
</html>

Resultado:

Pagina colocacao_registo.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Registo de Colocação em Projecto</title>
        <link href="../css/bootstrap.min.css" rel="stylesheet">
        <link href="../css/estilos.css" rel="stylesheet">
        <script src="../js/bootstrap.min.js"></script>
        <script src="../js/jquery-1.12.3.min.js"></script>
    </head>
    <body>
        <div class="container">

            <h3 style="text-align: center">Ficha de Registo de Colocação</h3>
            <br/>

            <form class="form-horizontal" role="form" action="" method="POST">

                <div class="form-group">
                    <label class="col-xs-3 control-label">Funcionario:</label>
                    <div class="col-xs-5" >
                        <select class="form-control" id="select_funcionario_colocacao" name="select_funcionario_colocacao">
                            <option></option>

                        </select>

                    </div>                 
                </div>

                <div class="form-group">
                    <label class="col-xs-3 control-label">Projecto:</label>
                    <div class="col-xs-5" >
                        <select class="form-control" id="select_projecto_colocacao" name="select_projecto_colocacao">
                            <option></option>

                        </select>

                    </div>                 
                </div>

                <div class="form-group">
                    <label class="col-xs-3 control-label">Início:</label>
                    <div class="col-xs-5" >
                        <input type="date"  class="form-control" id="inicio_colocacao" name="inicio_colocacao" placeholder="dd/MM/yyyy"/>
                    </div>
                </div>

                <div class="form-group">
                    <label class="col-xs-3 control-label">Fim:</label>
                    <div class="col-xs-5" >
                        <input type="date"  class="form-control" id="fim_colocacao" placeholder="dd/MM/yyyy"/>
                    </div>
                </div>


                <div class="col-md-4 col-md-offset-2">
                    <button type="submit" class="btn btn-primary" >Guardar</button>
                    <button type="submit" class="btn btn-primary" >Fechar</button>
                </div>
            </form>

        </div>
    </body>
</html>

Resultado:

Na construção das páginas é necessario prestar particular atenção a atribuir uma valor ao atributo name das tags dos campos de texto, caixas de combinação, botões de opção, etc. Esta propriedade é que permite a passagem de parametros para os servlets.

Home page

A home page serà construida com recursos à alguns canones do padrão composite view com uma evidência mais directa.

Conforme mostrado no prototipo a home page terá varias areas com destaque para o banner, na parte superior, o menu de navegação para parte lateral esquerda, o conteudo na parte central e o rodapé na parte inferior. Para estilizar o layout da home page será criado um ficheiro CSS especifico.

Seguindo as susgestões do prototipo apresentado no início da sessão, vai ser criado o codigo HTML e CSS para uma interface da home page. Por motivos práticos foi aptou-se por um codigo simples.

Ficheiro layout_home.css

body{    margin: 0; padding: 0;}

#contentor{width: 90%; margin-top: 10px; margin: 0 auto;}

#banner{width:94%; height: 90px; float: left; font-family: sans-serif; }

#menu{width: 250px; height: 600px; float: left; background:#FFFFCC;}

#menu ul{  margin: 0;   padding: 6px 5px;   list-style: none; }

#menu ul li a{   text-decoration: none;   color: #777;}

#menu ul li a:hover{   background: #2277CC;   color: #FFF; }

#conteudo{width: 80%; height: 600px; float: left;}

#rodape{width: 94%; height: 50px; clear: both; font-size: 1.5em; text-align: center;}

A home page é estruturada com div e faz recurso à utilização de iframes. O menu lateral esquerdo, o conteudo e o rodapé são incluidos na home page como componentes, conforme alguns canones do padrão composite view.

Pagina index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Tchoto -  Gestão de Projectos</title>
        <link rel="stylesheet" href="css/layout_home.css" type="text/css"/>
    </head>
     <body>
        <div id="contentor">
             <div id="banner">
                <h1 style="text-align: center">Tchoto - Gestão de Projectos</h1>
            </div>
            <div id="menu">
                <%@include file="menus/menu_navegacao.jsp" %>
                <img src="imagens/pensador.png" alt="O pensador"/>
            </div>
            <div id="conteudo">

                <img src="imagens/logo.jpg" alt="Logo entrada"/>

            </div>
            <div id="rodape">
                <%@include file="menus/rodape.jsp" %> 

            </div>
        </div>
    </body>
</html>

Ficheiro menu_navegacao.jsp


<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Menu de Navegação</title>
    </head>
    <body>

        <fieldset>
            <legend>Operações</legend>
        <ul>
            <li> <a href="./paginas/projeto_listar.jsp" >Projetos</a></li>
            <li><a href="./paginas/colocacao_listar.jsp" >Colocações</a></li>
            <li><a href="./paginas/funcionario_listar.jsp" >Funcionarios</a></li>

        </ul>
        </fieldset>
        <fieldset>
            <legend>Administração</legend>
            <ul>
                <li><a href="./paginas/tipo_projeto_listar.jsp" >Tipo de projetos</a></li>
                <li><a href="./paginas/categoria_funcionario_listar.jsp" >Categoria de Funcionários</a></li>
                <li><a href="./paginas/departamento_listar.jsp" >Departamentos</a></li>
                <li><a href="./paginas/municipio_listar.jsp" >Municipios</a></li>
                <li><a href="./paginas/provincia_listar.jsp" >Provincias</a></li>
            </ul>
        </fieldset>
    </body>
</html>

Resultado:

PRÁTICA

Nesta secção foram mostrados vários recursos de construção, com base nos exemplos anteriores pede-se ao leitor a implementação dos demais formulários da aplicação e ao mesmo tempo experimentar alterações no código de forma criativa.

results matching ""

    No results matching ""