2016-01-02 32 views
0

我想處理表中的特定行(用戶)。有很多用戶。我想從表中獲取user_id,單擊並顯示在另一頁上。現在,我正在使用信息表單。問題是Profile.jsp頁面始終顯示相同的user_id(第一個例如2)?從jsp中獲取表的行

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 %> 
+0

我猜問題在Iterator 它= usersContainer.iterator();檢查調試中的it.next()是什麼。 –

回答

0

爲了做到這一點,你需要有獨特的輸入變量名稱。這意味着你應該有第一行的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)); 
+0

但對於每一行,

是分開的。行名相互隔離,因爲user_id對所有用戶都是唯一的。 – andrew

+0

就像我已經說過的,你不能使用一個user_id並使其工作。每個輸入字段必須具有唯一的名稱。所以如果你有2行(如你的例子),你真的需要2個user_id。 –