【问题标题】:Fill in text field data in jsp from servlet从servlet中填写jsp中的文本字段数据
【发布时间】:2016-10-30 00:49:46
【问题描述】:

我在数据库中有数据,我希望其中的一些文本字段来自数据库。我创建了一个从数据库获取数据的方法。我有一个 open-account.jsp 页面,其中有一个表单,其中名字、姓氏和电子邮件已经从数据库中预填充,因此我使用了 servlet 中的 get 方法。当我尝试将数据从 servlet 发送到 jsp 页面时,该字段为空。我认为它没有将数据从 servlet 传递到 jsp,我不确定。这是我的代码:

数据库类:

public static ArrayList getUsers() 
    {
        ArrayList<Users> userList = new ArrayList<>();

        try
        {
            DBConnection.connectToDB();
            String query = "SELECT * FROM userlogin";

            stmt = DBConnection.conn.prepareStatement(query);
            ResultSet rs = stmt.executeQuery();

            while(rs.next())
            {
                Users user = new Users();
                user.setFirstName(rs.getString("firstname"));
                user.setLastName(rs.getString("lastname"));
                user.setEmail(rs.getString("email"));
                user.setUsername(rs.getString("username"));
                user.setPassword(rs.getString("password"));

                userList.add(user);
            }
        }
        catch(Exception e)
        {
            System.out.println(e);
        }

        return userList;
    }

open-account.jsp

<!DOCTYPE html>
<html>
<head>
    <title>Open Account</title>
</head>
<body>
    <h3>Please fill in the details</h3>

    <form name="openAccount" action="OpenAccount" method="GET">
        <!-- in openaccount servlet, we will get the users info and fill some
        of the forms below for them -->

        First Name: <input type="text" name="firstname" value= <%= request.getAttribute("Users.getFirstName()") %> > <br/><br/>
        Last Name: <input type="text" name="lastname"> <br/><br/>
        Email: <input type="text" name="email">  <br/><br/>

    </form>

    <form name="chooseAccount" action="OpenAccount" method="POST">  
        Select the type of account: 
        <select name="accounttype">
            <option>Checking</option>
            <option>Saving</option>
            <option>Money Market</option>
            <option>Credit Card</option>
        </select> <br/><br/>

        Please check the box if everything above is complete:
        Agree <input type="radio" name="agree" value="Agree">
        Disagree <input type="radio" name="agree" value="Disagree">

        <br/><br/>
        <input type="submit" value="submit" name="Submit">
    </form>
</body>
</html>

OpenAccount 服务

@WebServlet("/OpenAccount")
public class OpenAccount extends HttpServlet 
{
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        ArrayList<Users> userList = DBConnection.getUsers();

        request.setAttribute("Users", userList);
        RequestDispatcher dispatcher = request.getRequestDispatcher("open-account.jsp");
        dispatcher.forward(request, response);

    }

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

    }
}

【问题讨论】:

    标签: jsp servlets


    【解决方案1】:
    • 为了从request 获取列表,您需要在 jsp 中进行强制转换
    • 在您的 jsp 中,只需要一个 User 实例,而您的代码会传递整个 ArrayListUser
    • 代码 sn-p 只是为了理解您需要做什么来提取所需的信息。

      // make sure to import all required class
      Object users = request.getAttribute('Users');
      if(null != users && users instanceof ArrayList){
         ArrayList<User> userList = (ArrayList<User>)request.getAttribute('Users');
         for(User user: userList){
            out.println(user.getFirstName());
         }
      } else {
         out.println("No user records found.");
      }
      

    附:使用 jsp 脚本是不好的做法,您可以改用 JSTL。

    【讨论】:

      【解决方案2】:

      让我们看看你的jsp页面。似乎您只想显示用户配置文件而不是用户配置文件列表。所以你应该修改你的代码如下:

      数据库类:

      public static Users getUsers(String username) 
          {
              Users user = new Users();
              try
              {
                  DBConnection.connectToDB();
                  String query = "SELECT * FROM userlogin where username=?";
      
                  stmt = DBConnection.conn.prepareStatement(query);
                  stmt.setString(1,username);
                  ResultSet rs = stmt.executeQuery();
      
                  while(rs.next())
                  {
                      user.setFirstName(rs.getString("firstname"));
                      user.setLastName(rs.getString("lastname"));
                      user.setEmail(rs.getString("email"));
                      user.setUsername(rs.getString("username"));
                      user.setPassword(rs.getString("password"));
      
                  }
              }
              catch(Exception e)
              {
                  System.out.println(e);
              }
      
              return user;
          }
      

      open-account.jsp:

      <!DOCTYPE html>
      <html>
      <head>
          <title>Open Account</title>
      </head>
      <body>
          <h3>Please fill in the details</h3>
      
          <form name="chooseAccount" action="OpenAccount" method="POST">  
      
              <!-- in openaccount servlet, we will get the users info and fill some
              of the forms below for them -->
      
              First Name: <input type="text" name="firstname" value= <%= request.getAttribute("firstname") %> > <br/><br/>
              Last Name: <input type="text" name="lastname" value= <%= request.getAttribute("lastname") %>> <br/><br/>
              Email: <input type="text" name="email" value= <%= request.getAttribute("email") %>>  <br/><br/>
      
      
              Select the type of account: 
              <select name="accounttype">
                  <option>Checking</option>
                  <option>Saving</option>
                  <option>Money Market</option>
                  <option>Credit Card</option>
              </select> <br/><br/>
      
              Please check the box if everything above is complete:
              Agree <input type="radio" name="agree" value="Agree">
              Disagree <input type="radio" name="agree" value="Disagree">
      
              <br/><br/>
              <input type="submit" value="submit" name="Submit">
          </form>
      </body>
      </html>
      

      OpenAccount 服务:

      package com.javabycode;
      
      import java.io.IOException;
      import java.util.ArrayList;
      
      import javax.servlet.RequestDispatcher;
      import javax.servlet.ServletException;
      import javax.servlet.annotation.WebServlet;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      
      @WebServlet("/OpenAccount")
      public class OpenAccount extends HttpServlet 
      {
          private static final long serialVersionUID = 1L;
      
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
          {        
          Users users = DBConnection.getUsers();
      
          request.setAttribute("firstname", users.getFirstName());
          request.setAttribute("lastname", users.getLastName());
          request.setAttribute("email", users.getEmail());
          RequestDispatcher dispatcher = request.getRequestDispatcher("open-account.jsp");
          dispatcher.forward(request, response);
      
          }
      
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
          {
           // do something
           //System.out.println(request.getAttribute("firstname"));
          }
      }
      

      我参考post修改你的例子并在servlet容器上运行它

      如果你只是一个初学者我强烈推荐你Servlet 3 tutorial系列

      希望对您有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-04
        • 2015-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多