Qual seria lógica correta para criar um forúm Simples? [RESOLVIDO]

5 respostas
K

Galera estou tentando criar um forúm simples, para meu projeto da faculdade. Já tenho o Banco, os Beans, e agora estou nas JSP e Servlet.
Minha dúvida seria na lógica, pois estou modelando desta forma:

A página JSP exemplo de tópicos, carregará todos os tópicos do banco. Pra fazer isso automáticamente ela terá uma uma scriplet que acessará uma Servlet que terá por sua vez um dao que irá ler o banco. Depois vou passar essa informação com um Dispatcher que enviará uma lista de tópicos para a página.

Mas minha dúvida é… E quando alguém clicar no tópico para responder? Como enviarei o ID_Topico para Servlet, para essa usar a DAO e buscar todas as respostas (post’s)?

Pois geralmente em um forúm aparentemente tudo são links… Então o que devo fazer usar um <input type="alguma coisa"/>Nome tópico<input type="submit" />
Isso é bizarro! kkk. Mas é pra deixar claro minha dúvida.

5 Respostas

E

Você pode passar o id via parâmetros na url mesmo, ou se preferir, via post. Na url seria mais fácil caso use link. Basta você deixar o link apontando para a página do servlet mapeada, por exemplo: localhost:8080/forum/responder, e colocar um ? e os parâmetros, como localhost:8080/forum/responder?id=idaqui então no servlet você faz um request.getParameter(“id”) que ele te retornará o idaqui.

K

Bem, não sei se você entendeu minha dúvida, pois eu sei usar GET e POST mas a questão é que não queria usar um form no tópico, entende? Quando você veio me responder o que você fez? Clicou no link com o meu tópico não foi isso? Então! Eu não acredito que o nome deste tópico fique entre tag’s de um form com input’s pois se tivesse o que seria o botão submit, o clicar?

Mas vlw, pela iniciativa.

E

Bem, não sei se você entendeu minha dúvida, pois eu sei usar GET e POST mas a questão é que não queria usar um form no tópico, entende? Quando você veio me responder o que você fez? Clicou no link com o meu tópico não foi isso? Então! Eu não acredito que o nome deste tópico fique entre tag’s de um form com input’s pois se tivesse o que seria o botão submit, o clicar?

Mas vlw, pela iniciativa.
Hehe, acho que não expliquei muito bem e houve um engano. É o seguinte:

Você vai fazer um for para exibir todos os tópicos correto?
Algo, em jstl, como:

<c:forEach items="${requestScope.topicos}" var="topico">
  <!-- Toda a parte de view aqui -->
  <!-- Daí você cria um link tendo o nome do tópico por exemplo -->
  <a href="/forum/verTopico?id=${topico.id}">${topico.nome}</a>
</c:forEach>

Acho que é mais ou menos isso sua dúvida, correto?

K

Cara acho que você resolveu meu problema, acredito que a solução seja esta. Porém você pode me dar outra dica?
Olha minha lógica pra carregar os dados do Banco:

Obs: minha index tem um link pra ServletLoadPage que usa dao, seta um atributo e dá um forward pra página categoria.jsp. Coloquei no processRequest o código porque não method.

Página Categoria: lista todas as categorias.

<%
    List<Categoria> lista=null;
    lista=(List<Categoria>) request.getAttribute("lista");
%>

<%=request.getAttribute("lista")%>

<% if(lista!=null){
     for(int i=0; i<lista.size(); i++){%>
<p><%=lista.get(i).getTitulo()%></p>
<%   }
   }%>

Controler - Servlet: usa um DAO busca categorias e retorna para a página JSP acima citado.

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        
        try {          
            CategoriaDAO dao=new CategoriaDAO();            
            
            List<Categoria> lista=new ArrayList<Categoria>();
            lista=dao.listar();
                        
            request.setAttribute("lista", lista);
            request.getRequestDispatcher("../tela-categoria.jsp").forward(request, response);
        } finally {            
            out.close();
        }
    }

Observe que a parte do JSP que tem <%=request.getAttribute("lista")%> é apenas um teste pra ver minha referência ao Objeto ok?
Mas tentei tudo porém esse atributo sempre chega null, será que é porque eu não estou enviando um request pra Servlet e apenas alterando o valor do request na Servlet?

Fica a questão!

E

Ixi cara! Faz tempo que não mecho com servlets então vou ter problemas para te ajudar. Mas vou te dar uma dica para verificar esse erro:

Tente no lugar onde você escreveu:

&lt;%=request.getAttribute("lista")%&gt;

Fazer o equivalente com EL:

${requestScope.lista}

Outra dica seria debugar seu código e ver se o teu dao está retornando a lista corretamente.
Ou basta você dar um println e ver se no console imprime diferente de null depois que você lista:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException, SQLException {  
        response.setContentType("text/html;charset=UTF-8");  
        PrintWriter out = response.getWriter();  
          
        try {            
            CategoriaDAO dao=new CategoriaDAO();              
              
            List&lt;Categoria&gt; lista=new ArrayList&lt;Categoria&gt;();  
            lista=dao.listar(); 

            System.out.println(lista);
                          
            request.setAttribute("lista", lista);  
            request.getRequestDispatcher("../tela-categoria.jsp").forward(request, response);  
        } finally {              
            out.close();  
        }  
    }

E te aconselho a estudar JSTL core para as lógicas de if, for, switch, etc. E estudar EL também, assim você consegue um código bem mais enxuto na parte view.

Criado 23 de março de 2012
Ultima resposta 24 de mar. de 2012
Respostas 5
Participantes 2