隐藏字段是否始终从项目列表中提交第一个值?

时间:2016-11-26 00:26:08

标签: javascript java html http servlets

我一直试图解决这个问题很长一段时间。不知道我哪里出错了。 我显示了数据库中的网站列表,其中每个网址都有唯一的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或其他替代方案。

1 个答案:

答案 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,则行为未定义