我有一个动态生成数据库值的表。 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。
答案 0 :(得分:1)
只需借助隐藏的输入元素将其作为附加请求参数传递。
E.g。
<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 attacks也很敏感。 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>