2

我有一个从我的数据库动态生成值的表。list变量是某个 Object 的arrayList

 <table border="1">
                     <tr>
                        <th>Username</th>
                        <th>Full Name</th>
                        <th>Status</th>
                        <th>Action</th>
                     </tr>

                        <%for(int x = 0; x <list.size(); x++) {%>
                        <tr>
                        <td><% out.println(list.get(x).getUsername()); %></td>
                        <td><%out.println(list.get(x).getFirstname() + list.get(x).getMiddleinitial() + list.get(x).getLastname());%></td>
                         <td><% out.println(list.get(x).getStatus()); %></td>
                          <td> 
                              <form action="ViewManager" method="POST">
                                   <input id="button" type="submit" value="View" >
                              </form>
                              <form action="LockManager" method="POST">
                                   <input id="button" type="submit" value="Lock" >
                              </form>
                              <form action="DeleteManager" method="POST">
                                   <input id="button" type="submit" value="Delete" >
                              </form>

                          </td>
                        </tr>
                        <% }%>


                    </table>

我想要的是在我按下按钮的地方捕获特定行的用户名并将其传递给 servlet。

4

1 回答 1

1

只需借助隐藏的输入元素将其作为附加请求参数传递即可。

例如

<form action="ViewManager" method="POST">
    <input type="hidden" name="username" value="<%= list.get(x).getUsername() %>" />
    <input id="button" type="submit" value="View" >
</form>

它可以作为

String username = request.getParameter("username");

与具体问题无关,这是一种老式的 JSP 编写方式。上述方法对XSS 攻击也很敏感。Java/JSP scriptlet没有内置工具来防止这种情况。考虑使用JSTL <c:forEach>来遍历列表并fn:escapeXml()转义用户控制的数据以防止 XSS 攻击漏洞。

<c:forEach items="${users}" var="user">
    ...
    <input type="hidden" name="username" value="${fn:escapeXml(user.username)}" />
    ...
</c:forEach>

也可以看看:

于 2013-03-15T14:25:24.967 回答