使用HTML表单将信息传递给Java Servlet

时间:2016-06-10 17:36:19

标签: java html jsp servlets request

好的,我有两个Java Servlet,一个用于让用户选择要删除的图像(DeleteImages),另一个用于实际删除图像(HandleDelete)。 DeleteImages显示容器中的所有图像,并带有复选框HTML表单,供用户选择要删除的图像。然后,使用POST,servlet将该信息传递给HandleDelete,它会迭代它收到的图像并删除它们。

我实际上有这个工作,但后来我尝试更改代码的结构(将DeleteImages转发到.jsp文件,该文件输出HTML表单,然后转发到HandleDelete)但是没有成功,所以我试图回到原来的方式,现在它不工作,即使我很确定它和我一样以前有过。

来自DeleteImages

// retrieve image files 
List<? extends SwiftObject> objs = os.objectStorage().objects().list("imageFiles"); 

out.println("<!DOCTYPE html><html><head><title>Object Storage - Delete</title><link rel='stylesheet' href='stylesheet.css' type='text/css' /></head>"
+ "<body>
<h1>Select images to Delete from container</h1>
<form method='POST' enctype='multipart/form-data' action='/ImageUpload/OSHandleDelete'>");

for (SwiftObject o : objs) {
    // omitted code that gets the image's name, date last modified, and filepath (all Strings, I know this works) 

    out.println("<b>Name:</b> " + name + "<br/> <b>Time of Upload:</b> " + date + "<br/>"
            + "<input type='checkbox' name='"+name+"'> "
            + "<img src='"+filepath+"' alt='' style='max-width:800px;' /> <br/> <br/> <br/> ");
}

out.println("<input type='submit' value='Delete Images' /></form>");
out.println("</form> <br/> <br/> <div><br/><a class='return' href='index.jsp'><b>Click here to return home</b></a><br/><br/></div> <br/> <br/></body></html>");

来自HandleDelete

Enumeration<String> parameterNames = request.getParameterNames();
if (!parameterNames.hasMoreElements())
    System.out.println("no parameters (null)"); 

while (parameterNames.hasMoreElements()) {

    String paramName = parameterNames.nextElement();
    System.out.println("*****************"); 
    System.out.println("parameter: " + paramName); 

    String[] vals = request.getParameterValues(paramName); 
    if (vals == null) 
        System.out.println("     vals is null for " + paramName); 
    else {
        for (int i = 0; i < vals.length; i++) {
            System.out.println("     vals["+i+"]: " + vals[i]); 
    }
}

现在除了印刷语句之外我还没有HandleDelete做任何事情。这是因为我使用request.getParameter("<name>")来确定用户是否检查了<name>的图像(即,如果它未被检查,但是如果它未被检查则是否为空) 。

HTML表单与图像和所有内容完美展现。我的问题是,无论在HTML表单中检查了什么,HandleDelete始终会打印到控制台no parameters (null),这意味着没有任何内容从DeleteImages传递到HandleDelete。我感觉问题来自(1)DeleteImages中的setAttribute语句或(2)HTML表单中的内容。我已经做了大量的搜索,我非常自信我拥有的是正确的,但我真的无法弄清楚导致这个问题的原因(特别是因为我在这里)非常确定这正是我以前所做的,并且它有效。有没有人有任何想法?

1 个答案:

答案 0 :(得分:0)

我发现了错误:我收录了enctype=multipart/form-data

不完全确定导致错误的原因,但我删除了该部分,现在它完全传递了参数。谢谢你的帮助!

相关问题