3
respostas

Nem deletar e nem editar estão funcionando.

 Embora eu tenha seguido os passos do professor e revisado o código 
várias vezes, nenhum dos links funcionam, o código que eu escrevi,
tirando pelo nome das classes e objetos como o da classe Banco (dado pelo
professor) e o meu que é BancoDeDados, o código está igual.
 Porém, a maior diferença que eu encontrei é que no meu console da IDE 
aparece a mensagem:
 "WARNING: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [180] milliseconds."
 Já no console do professor não aparece isso, somente as INFORMAÇÕES
em vermelho geradas quando se roda o servlet.
3 respostas

Oi Murilo,

Posta aqui seu código, por favor.

 OK, mas como eu já iniciei o curso de servlets 2, o código 
está de acordo com a primeira aula desse curso.

 package br.com.my.gerenciador.modelo;

"importes"

public class DataBase {

    private static List<Empresa> lista = new ArrayList<>();
    private static Integer key = 1001;

    public void adiciona(Empresa e) {
        lista.add(e);
        e.setId(key++);
    }

    public List<Empresa> getEmpresas(){
        return lista;
    }

    public void remover(Integer id) {

    Iterator<Empresa> it = lista.iterator();

            while (it.hasNext()) {
                Empresa empresa = it.next();
                if(empresa.getId() == id)
                    it.remove();
            }    
    }

    public Empresa catCompany(Integer id) {
        for (Empresa empresa : lista) {
            if(empresa.getId() == id)
                return empresa;
        }
        return null;
    }
}

Nessa classe que o professor chamou de Banco eu decidi
não colocar as empresas estáticas.

package br.com.my.gerenciador.servlet;

"importes"

/**
 * Servlet implementation class ServletMaster
 */
@WebServlet("/login")
public class ServletMaster extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String açao = request.getParameter("action");

        if(açao.equals("CompanyList")) {
            ListarEmpresas listar = new ListarEmpresas();
            listar.executarListar(request, response);
        }
        else if(açao.equals("DeleteCompany")) {
            DeletarEmpresas delete = new DeletarEmpresas();
            delete.executarDeletar(request, response);
        }
        else if(açao.equals("ShowCompany")) {
            MostrarEmpresas show = new MostrarEmpresas();
            show.executarMostrar(request, response);
        }
        else if(açao.equals("EditCompany")) {
            EditarEmpresa edit = new EditarEmpresa();
            edit.executarEditar(request, response);
        }
        else if(açao.equals("CreateCompany")) {
            CriarEmpresa create = new CriarEmpresa();
            create.executarCriar(request, response);
        }
    }
}

Esse é o único servlet que o professor ensina no curso de
servlets 2.
A seguir todas as ações que antes eram servlets:

package br.com.my.gerenciador.tarefas;

"importes"

public class CriarEmpresa {

    public void executarCriar(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

        String Companyname = request.getParameter("nome");
        String Companydate = request.getParameter("data");
        Date ofCreation = null;

        try {
            SimpleDateFormat fdate = new SimpleDateFormat("dd/MM/yyyy");
            ofCreation = fdate.parse(Companydate);
        } catch(ParseException ex) {
            throw new ServletException(ex);
        }

        Empresa e = new Empresa();
        e.setNome(Companyname);
        e.setData(ofCreation);
        DataBase db = new DataBase();
        db.adiciona(e);

        request.setAttribute("empresa", e.getNome());
        response.sendRedirect("login?action=CompanyList");

        System.out.println("New company created");
    }
}

package br.com.my.gerenciador.tarefas;

"importes"

public class DeletarEmpresas {

    public void executarDeletar(HttpServletRequest request, HttpServletResponse response) 
            throws IOException {

        String paramid = request.getParameter("id");
        Integer id = Integer.valueOf(paramid);
        DataBase base = new DataBase();
        base.remover(id);

        response.sendRedirect("login?action=CompanyList");

        System.out.println("Deleting the company");
    }
}

package br.com.my.gerenciador.tarefas;

"importes"

public class EditarEmpresa {

    public void executarEditar(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {

        String newCompanyName = request.getParameter("nome");
        String newCompanyDate = request.getParameter("data");
        String paramid = request.getParameter("id");
        Integer id = Integer.valueOf(paramid);
        Date ofChange = null;

        try {
            SimpleDateFormat fdate = new SimpleDateFormat("dd/MM/yyyy");
            ofChange = fdate.parse(newCompanyDate);
        } catch(ParseException ex) {
            throw new ServletException(ex);
        }

        DataBase base = new DataBase();
        Empresa emp = base.catCompany(id);
        emp.setNome(newCompanyName);
        emp.setData(ofChange);

        response.sendRedirect("login?action=CompanyList");

        System.out.println("Changing company's datas");
    }
}

package br.com.my.gerenciador.tarefas;

"importes"

public class ListarEmpresas {

    public void executarListar(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        DataBase db = new DataBase();
        List<Empresa> list = db.getEmpresas();

        request.setAttribute("empresas", list);
        RequestDispatcher resq = request.getRequestDispatcher("/companiesList.jsp");
        resq.forward(request, response);

        System.out.println("Listing companies");
    }
}
Continuação:

package br.com.my.gerenciador.tarefas;

"importes"

public class MostrarEmpresas {

    public void executarMostrar(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String paramid = request.getParameter("id");
        Integer id = Integer.valueOf(paramid);
        DataBase base = new DataBase();
        Empresa emp = base.catCompany(id);

        request.setAttribute("empresa", emp);
        RequestDispatcher rd = request.getRequestDispatcher("/formEditCompany.jsp");
        rd.forward(request, response);

        System.out.println("Showing the company");
    }

}

Agora os códigos html com umas coisas a mais que já
aprendi e decidi colocar:

<%@
    page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"
    import="java.util.List,br.com.my.gerenciador.modelo.Empresa"
%>
<%@    
    taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"
%>
<%@    
    taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"
%>
<c:url value="/login" var="linkToRemove"/>
<c:url value="/login" var="linkToEdit"/>

<!DOCTYPE html>
<html>

 <head>
    <meta charset="ISO-8859-1">
     <title>Companies Registered</title>
 </head>

<body>

    <h1>
        <c:if test="${not empty empresa }">
        <p>
            Company ${empresa } is now registered! <% //${Expression Language} %>
        </p>
    </c:if>
    </h1>
    <br>
    <h2> Empresas Cadastradas: </h2>
    <ol style="list-style-type:upper-roman">
        <c:forEach items="${empresas}" var="company">
            <li>
                ${company.nome } - 
                <fmt:formatDate value="${company.creationDate }" pattern="dd/MM/yyyy"/> - 
                <a href="${linkToRemove }?action=DeleteCompany&id=${company.id }"> delete </a> /  
                <a href="${linkToEdit }?action=ShowCompany&id=${company.id }"> update </a> 
            </li>
        </c:forEach>
    </ol>
    <a href="formNewCompany.jsp"> Novo cadastro </a>

</body>

</html>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:url value="/login?action=CreateCompany" var="linkToNewCompany"/>


<!DOCTYPE html>
<html>

<head>
    <meta charset="ISO-8859-1">
      <title>Company creation</title>
</head>

<body style="text-align:center">

    <form action="${linkToNewCompany }" method="post">
        Nome da Empresa: <input type="text" name="nome"/>   
        Data de Criação: <input type="text" name="data"/>
          <input type="submit"/> 
    </form>
    <hr size=10px color=darkred>
      <img src="punch_detail.jpg"/>
    <hr size=10px color=darkred>

</body>

</html>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<c:url value="/login" var="linkToNewCompany"/>

<!DOCTYPE html>
<html>

<head>
    <meta charset="ISO-8859-1">
      <title>Company's changes</title>
</head>

<body style="text-align:center;background-image:url(lamborghini.jpg)">

    <form action="${ linkToNewCompany }" method="post">
        Novo Nome: <input type="text" name="nome" value="${empresa.nome }"/>   
        Data de Alteração: <input type="text" name="data" value="<fmt:formatDate value="${empresa.creationDate }" pattern="dd/MM/yyyy"/>"/>     
          <input type="hidden" name="id" value="${empresa.id }"/> 
          <input type="hidden" name="action" value="EditCompany"/>
          <input type="submit"/> 
    </form>

</body>

</html>

 Nesse último código os campos de texto deveriam vir com 
os valores que eu coloquei, mas eles vem em branco. Por isso
quando eu aperto o botão de enviar, dá um erro no servidor.
Já que no server ele deveria pegar esses parâmetros, porém
como ele está vazio, da erro. 
 Eu tentei dar uma emprovisada e mudei o tipo hidden pra colocar 
o id e ver se funciona, mas ao invés de dar o erro antigo que era 
de 'NumberFormatException' se me lembro bem, já que no
 EditarEmpresa eu pego essa valor e faço o parsing de string para
 integer, e não tem como fazer esse parsing se o id estiver em branco.
O novo erro passa a ser de NullPointerExeption, o que me levou a 
crer que o erro está na Classe DataBase que por algum motivo
não localizava o id no método catCompany e chegava no return null.
Ai eu mudei pra return new Empresa() só pra ver, e o erro parou,
só que assim como o link delete, ele voltava pra lista sem alterar nada.