首页 > 解决方案 > JSP中实现推特的问题:IF语句不能正常工作

问题描述

作为我大学学习的一部分,我必须使用 JSP 创建一个简单的 Twitter 程序。

结构如下:

  1. 输入用户名并通过 login.jsp 登录。转到 list.jsp。

  2. 在 list.jsp 中,您可以创建推文和删除您编写的推文。

  3. 推文创建在 tweet.jsp 中完成,它不显示单独的屏幕。

下面是完整的代码。

twitter_login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.ArrayList"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>twitter Login</title>
  </head>
  <body>
    <center>
      <h2>twitter Login</h2>
      <form name=form1 method=post action=twitter_list.jsp>
        <input type="text" name="username"/>
        <input type="submit" value="login"/>
      </form>
    </center>
  </body>
</html>

twitter_list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">
<%
  request.setCharacterEncoding("UTF-8");
  String username = request.getParameter("username");
  if(username != null) {
    session.setAttribute("user",username);
  }
  %>
<html>
  <head>
    <script>
      function func() {
        
      }
    </script>
    <title>Twitter</title>
  </head>
  <body>
    <div align=center>
      <h3>My Simple Twitter!</h3>
      <hr>
      <form action="tweet.jsp" method="POST">
        @<%=session.getAttribute("user") %> <input type="text" name="msg">
        <input type="submit" value="Tweet"> 
      </form>
      <hr>
      <div align="left">
        <OL type="1">
          <% 
            ArrayList<String>msgs = (ArrayList<String>)application.getAttribute("msgs");
            ArrayList<String>id = (ArrayList<String>)application.getAttribute("id");
            Object un = session.getAttribute("user");
            String string_un = String.valueOf(un);
            if(msgs != null)
            {
                for(int i=0; i<msgs.size(); i++) {
                    out.println("<LI>"+ msgs.get(i));
                    if(id.get(i) == string_un) {
                       out.println("<input type='button' value='delete' onclick='func()'/>" +"<LI>");
                    }
                }
            }
            %>
        </OL >
      </div>
    </div>
  </body>
</html>

推文.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
  request.setCharacterEncoding("UTF-8");
  String msg = request.getParameter("msg");
  Object username = session.getAttribute("user");
  String idstring = String.valueOf(username);
  ArrayList<String>msgs = (ArrayList<String>)application.getAttribute("msgs");
  ArrayList<String>id = (ArrayList<String>)application.getAttribute("id");
  if (msgs == null) {
    msgs = new ArrayList<String>();
    application.setAttribute("msgs", msgs);
  }
  if (id == null) {
    id = new ArrayList<String>();
    application.setAttribute("id", id);
  }
  msgs.add(username+" :: " +msg+" , "+ new java.util.Date());
  id.add(String.valueOf(username));
  application.log(msg+"added");
  response.sendRedirect("twitter_list.jsp");
  %>

那么,问题是什么?

我一起创建了数组列表msg和id,在输出tweet时list.jsp,如果当前连接的username和数组列表id值相同,则delete在tweet旁边显示按钮。

但由于它实际工作的结果,我没有看到我之前使用相同用户名写的推文旁边的删除按钮。请参考截图。 在此处输入图像描述

如果我解决了这个问题并继续下一步,那么我认为我应该msgs.remove(i)在单击删除按钮时删除该按钮旁边的推文。

但是如何单击该按钮并激活msgs.remove(i)

onclick和 javascript 函数只是临时的东西。我尝试使用另一个 jsp ( delete.jsp) 使用表单操作来处理它。但是,很难传递 i 的值。有没有办法匹配i-value每个按钮?

或者请建议另一条正确的路径。

我已经为这个问题徘徊了两天。

标签: javahtmljspsessionarraylist

解决方案


推荐阅读