我一直试图解决这个问题很长一段时间。不知道我哪里出错了。 我显示了数据库中的网站列表,其中每个网址都有唯一的ID(我将这些网址保存为隐藏字段)。
for(int i = 0; i < favoriteList.length; i++) {
String url = favoriteList[i].getUrl();
out.println("<tr>");
out.println("<td>");
out.println(" <form id=\"countForm\" method=\"POST\">");
out.println(" <input type=\"hidden\" name=\"favoriteID\" value=\""
+ favoriteList[i].getFavoriteId() + "\" />");
out.println("<a"
+ " href =\" javascript:document.countForm.submit();\""
+ " onclick=\"document.getElementById('countForm').submit();\"" + " />" + url + "</a>");
out.println("</form>");
out.println("</td> <tr> <td>");
out.println("<p>" + favoriteList[i].getComment() + "</p>" );
out.println("</td></tr> <tr><td>");
out.println("<p>" + favoriteList[i].getClickCount() + "</p>");
out.println("</td></tr>");
}
正确显示网站列表。但是,在单击URL后,表单应该被提交并且URL的计数应该增加(基本上,尝试计算点击次数)。每当我尝试将URL的ID(来自隐藏字段)提取为String updateAction = request.getParameter("favoriteID");
时,第一个链接的ID(1)就会被读取。不确定我是否正确行事。
修改 我知道编写Servlet是一个坏主意,但这是一个功课,我必须使用Servlet,而不是JSP或其他替代方案。
答案 0 :(得分:1)
如果您的favoriteList
包含多个元素,那么您就可以创建多个 <form>
元素,这些元素都名为countForm
。
document.getElementById('countForm')
将以该名称返回第一个 1 表单,因此您始终发布第一个表单 ,而不是带有链接的表格。
修复它的一种方法是以不同方式命名表单,例如将表单名称后缀为i
:
for(int i = 0; i < favoriteList.length; i++) {
String url = favoriteList[i].getUrl();
out.println("<tr>");
out.println("<td>");
out.println(" <form id=\"countForm" + i + "\" method=\"POST\">");
out.println(" <input type=\"hidden\" name=\"favoriteID\" value=\""
+ favoriteList[i].getFavoriteId() + "\" />");
out.println("<a"
+ " href =\" javascript:document.countForm" + i + ".submit();\""
+ " onclick=\"document.getElementById('countForm" + i + "').submit();\"" + " />" + url + "</a>");
out.println("</form>");
out.println("</td> <tr> <td>");
out.println("<p>" + favoriteList[i].getComment() + "</p>" );
out.println("</td></tr> <tr><td>");
out.println("<p>" + favoriteList[i].getClickCount() + "</p>");
out.println("</td></tr>");
}
1 注意:您获得第一个表单的事实取决于浏览器。 DOM spec说:
返回由elementId给出
id
的元素。如果不存在此类元素,则返回null
。如果多个元素具有此id
,则行为未定义。