【问题标题】:Get row from table in jspjsp中从表中获取行
【发布时间】:2016-01-02 12:28:59
【问题描述】:

我想处理表中的特定行(用户)。有很多用户。我想从表中获取 user_id,单击并显示在另一个页面上。现在,我正在使用邮寄表格。问题是 Profile.jsp 页面始终显示相同的 user_id(第一个例如 2)?

jsp文件:

//...
<table>
<tr>
<th>user_id</th>
<th>user_email</th>
<th>user_password</th>
<th>Show</th>
</tr> 
<%
  List<String> usersContainer = UsersWorker.GetUsers();

  Iterator<String> it = usersContainer.iterator();

  while (it.hasNext()) {

      out.print("<tr>");

      for (int i = 0; i < 2; ++i) {

          if(i==0) {
          %><form action="ProfileServlet" method="post"><%

                  int user_id = Integer.parseInt(it.next());
                  %><td><input style="width: 30px" type="text" name="user_id" value="<% out.print(user_id); %>" readonly></td><%
          }
          out.print("<td>");
          out.print(it.next());
          out.print("</td>");

          if(i==1) {

            %><td><input type="submit" value="Show"></td><%
          }
            %></form><%
      }
  out.print("</tr>");
 }
%>
</table>

Servlet java 文件:

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

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);

        String user_id = request.getParameter("user_id");
        System.out.print("user = " + user_id);
        request.setAttribute("user_id", user_id);
        getServletContext().getRequestDispatcher("/Index.jsp?subpage=6").forward(request, response);
    }
}

配置文件jsp文件:

<title>Profile</title>
<b>Profile</b>
<%
    String action = (String) request.getAttribute("user_id");
    %><br>user_id : <%=action %>

【问题讨论】:

  • 我猜问题出在 Iterator it = usersContainer.iterator();在调试中检查 it.next() 是什么。

标签: java database forms jsp servlets


【解决方案1】:

为此,您需要拥有唯一的输入变量名称。这意味着第一行应该有 user_id0,第二行应该有 user_id1,依此类推。

您还应该为每一行添加一个额外的提交按钮(一个提交按钮不会这样做)

<td><input type="submit" name="submitBtn"+i value="Submit"></td> 

请注意,按钮也应该有唯一的名称。

在您的 servlet 中,检查单击了哪个按钮

private int getRecordIndex(HttpServletRequest request){

    int i;
    for(i=0;i<2;i++){
        if(request.getParameter("submitBtn"+i)!=null)
            break;//button has been clicked

    }
    return i;
}

i 的值告诉您选择了哪一行,因此您可以在 doPost 中简单地检索您的值

 String user_id = request.getParameter("user_id"+getRecordIndex(request));

【讨论】:

  • 但是
    对于每一行都是分开的。行名称是彼此的,因为 user_id 对于所有用户都是唯一的。
  • 就像我已经说过的,您不能使用单个 user_id 来完成这项工作。每个输入字段都必须有一个唯一的名称。因此,如果您有 2 行(如您的示例中),您确实需要 2 个 user_id。
猜你喜欢
  • 2014-07-04
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多