Como reduzir a quantidade de scriplets em JSP?

8 respostas
C

Olá pessoal,
Tenho um arquivo JSP (cadastraveiculo.jsp) que recebe dados de um veículo e o coloca na sessão (a chave é a placa do veículo). Tenho também outro arquivo JSP (buscar.jsp), que além de buscar um veículo da sessão e apresentar os dados no formulário, permite a atualização dos dados deste veículo.

Acontece que tenho scriptlets pra resolver este problema, o que não é adequado. Como eu poderia substituir esses scriptlets por tags JSP de forma mais adequada para que as páginas fiquem limpas?

Segue o código dos dois arquivos.

cadastraveiculo.jsp

<jsp:useBean id="veiculo" class="beans.Veiculo" />
<jsp:setProperty name="veiculo" property="*" />

<%
    if(request.getParameter("bt_cadastrar") != null){
        String placa = request.getParameter("placa");
    
        if(placa != null){
            session.setAttribute(placa, veiculo);
        }
        
    }
%>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Veículos</title>
    </head>
    <body>
        <h1>Cadastro de Veículo</h1><br/>
        <form action="cadastraveiculo.jsp" method="POST">
            <table>
                <tr>
                    <td>Placa:</td>
                    <td><input type="text" name="placa" size="8"></td>
                </tr>
                <tr>
                    <td>Ano:</td>
                    <td><input type="text" name="ano" size="4"></td>
                </tr>
                <tr>
                    <td>Marca:</td>
                    <td><input type="text" name="marca" size="10"></td>
                </tr>
                <tr>
                    <td>Modelo:</td>
                    <td><input type="text" name="modelo" size="10"></td>
                </tr>
                <tr>
                    <td>Combustível:</td>
                    <td><select name="combustivel">
                            <option value="gas">Gás
                            <option value="gasolina">Gasolina
                            <option value="alcool">Álcool
                        </select>
                    </td>
                </tr>
                <tr>
                    <td>Único dono:</td>
                    <td><select name="unicoDono">
                            <option value="S">Sim
                            <option value="N">Não
                        </select>
                    </td>
                </tr>
                <tr>
                    <td>Descrição:</td>
                    <td>
                        <textarea rows="5" cols="30" name="descricao" />
                    </td>
                </tr>
                <tr>
                    <td colspan="2"> <input type="submit" name="bt_cadastrar" value="Cadastrar"></td>
                </tr>
            </table>
        </form>
    </body>
</html>

buscar.jsp

<%@ page import="beans.Veiculo" %>  
   <%
   Veiculo v = new Veiculo();
   String botaoBuscar = request.getParameter("bt_buscar");
   if(botaoBuscar != null){
    String placa = request.getParameter("placa");
    if(placa != null){
        v = (Veiculo)session.getAttribute(placa);
        if(v == null){
            v = new Veiculo();
        }
    }
   }else if(request.getParameter("bt_alterar") != null){
        String placa = request.getParameter("placa");
        String ano = request.getParameter("ano");
        String modelo = request.getParameter("modelo");
        String marca = request.getParameter("marca");
        String unicoDono = request.getParameter("unicoDono");
        String combustivel = request.getParameter("combustivel");
        String descricao = request.getParameter("descricao");
        
        Veiculo veiculo = new Veiculo(placa, ano, modelo, marca, combustivel, unicoDono, descricao);
        if(placa != null){
            session.setAttribute(placa, veiculo);
        }
        
    }
   %>

<jsp:useBean id="veiculo" class="beans.Veiculo" />
<jsp:setProperty name="veiculo" property="placa" value="<%= v.getPlaca() %>" />
<jsp:setProperty name="veiculo" property="ano" value="<%= v.getAno() %>" />
<jsp:setProperty name="veiculo" property="marca" value="<%= v.getMarca() %>" />
<jsp:setProperty name="veiculo" property="modelo" value="<%= v.getModelo() %>" />
<jsp:setProperty name="veiculo" property="descricao" value="<%= v.getDescricao() %>" />

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Busca de Veículos</title>
    </head>
    <body>
      <h1>Busca de Veículo</h1><br/>
        <form action="buscar.jsp" method="POST">
            <table>
                <tr>
                    <td>Placa:</td>
                    <td><input type="text" name="placa" size="8" value="<jsp:getProperty name="veiculo" property="placa"/>" ></td>
                </tr>
                <tr>
                    <td>Ano:</td>
                    <td><input type="text" name="ano" size="4" value="<jsp:getProperty name="veiculo" property="ano"/>"></td>
                </tr>
                <tr>
                    <td>Marca:</td>
                    <td><input type="text" name="marca" size="10" value="<jsp:getProperty name="veiculo" property="marca"/>"></td>
                </tr>
                <tr>
                    <td>Modelo:</td>
                    <td><input type="text" name="modelo" size="10" value="<jsp:getProperty name="veiculo" property="modelo" />"></td>
                </tr>
                <tr>
                    <td>Combustível:</td>
                    <td><select name="combustivel">
                            <option value="gas" <%if (v.getCombustivel().equals("gas")) out.println("selected"); %> >Gás
                            <option value="gasolina" <%if (v.getCombustivel().equals("gasolina")) out.println("selected"); %> >Gasolina
                            <option value="alcool" <%if (v.getCombustivel().equals("alcool")) out.println("selected"); %> >Álcool
                        </select>
                    </td>
                </tr>
                <tr>
                    <td>Único dono:</td>
                    <td><select name="unicoDono">
                            <option value="S" <%if (v.getUnicoDono().equals("S")) out.println("selected"); %> >Sim
                            <option value="N" <%if (v.getUnicoDono().equals("N")) out.println("selected"); %> >Não
                        </select>
                    </td>
                </tr>
                <tr>
                    <td>Descrição:</td>
                    <td>
                        <textarea rows="5" cols="30" name="descricao">
                            <jsp:getProperty name="veiculo" property="descricao"/>
                        </textarea>
                    </td>
                </tr>
                <tr>
                    <td> <input type="submit" name="bt_buscar" value="Buscar"></td>
                    <td> <input type="submit" name="bt_alterar" value="Alterar"></td>
                </tr>
            </table>
        </form>
    </body>
</html>

8 Respostas

furutani

Use JSTL http://www.dsc.ufcg.edu.br/~jacques/cursos/daca/html/jstl/jstl.htm

C

Ok. Isto eu já sei, inclusive estou usando algumas tags. Mas estou com dificuldade em desenvolver este exercício apenas com tags.

Alguém pode me ajudar com este exercício?

Obrigada.

furutani

No seu caso só o JSTL não ajuda, você teria que aplicar um framork MVC, tal como Struts, JSF, Mentawai, etc.

L

Uma opção é usar um framework MVC. Os action-based, como o Struts 2, são os menos “traumáticos” quando se refere a dar um refactoring numa aplicação já existente como o seu.

Mas você pode, ao invés disso, usar Servlets seguido de JSP. É só você pegar o trecho inicial das suas páginas que estão dentro de scriptlets e movê-los dentro de uma classe que herde de HttpServlet (não se esqueça de registrá-lo no web.xml). Depois, faça um forward para a página jsp, agora sem aquele trecho de código inicial. Exemplo do forward:

request.getRequestDispatcher("cadastraveiculo.jsp").forward(request, response);

É isso.

baudamix

concordo com o Leonardo3001 acho que vc deve utilizar servlets.
As tag JSTL devem ser suficientes para vc ,caso contrario está delegando funções de mais para seu JSP…

sugiro que de uma olha nessa apostila pode te ajudar e mto…

nela tem uma ideia legal para servlets

abr

C

Eu to entendendo: delego as funcionalidades a um servlet. Ele deve colocar um bean na sessão, atualizá-lo, buscá-lo, seja lá que tarefa for. Após fazer isto, a requisição é encaminhada para o JSP, que apresentará os dados necessários.

Obrigada, gente! Valeu!

baudamix

:smiley:

precisar é só voltar

LPJava

usar as tag JSTL é a melhor opcao… alem de ficar mais facil de dar manutenção!!! o livro head first JSP & Servlet o capitulo 10 aborda bem essas as tag JSTL se fizer uma busca na net vc acha ele…

Criado 30 de março de 2008
Ultima resposta 2 de abr. de 2008
Respostas 8
Participantes 5