动态表单,有或没有multipart / form

我在java中设计了一个简单的CRUD框架,在我的HTML页面中,我有一个动态表单(其中2个用于创建和更新文件上传,1个用于没有fileupload和multipart删除)。 服务器端,请求调节器使用request.getParameterMap();检查所有参数request.getParameterMap(); 并从这个隐藏类型输入中检查是否有一个创建,更新或删除操作。 <input type="hidden" name="returntype" value="Create"> 基于它会调用必要的处理程序。

注:我的表单enctype和编码设置为multipart / form-data注意:我的paramMap.size()在此处返回0,并且returnType变为null,因此我得到空指针异常。

如果我根本不使用enctype和编码,它运行良好,但是再次我的文件上传给了我一个例外,即编码类型应该是multipart / form-data 。 任何人都可以帮助我,我可以创建一个可以创建CRUD的动态表单吗? 或者为什么我不能使用request.getParameterMap();multipart / form-data感谢:)

下面给出的是请求调制器的代码

public String identifyNow()throws ServletException, java.io.IOException
{
    UploadXmlAgent uploadAgent;
    paramMap=request.getParameterMap();
    if (paramMap == null)
        throw new ServletException(
          "getParameterMap returned null in: " + getClass().getName());

    iterator=paramMap.entrySet().iterator();
    System.out.println(paramMap.size());
    while(iterator.hasNext())
    {
        Map.Entry me=(Map.Entry)iterator.next();
        if(me.getKey().equals("returntype"))
        {
            String[] arr=(String[])me.getValue();
            returnType=arr[0];
        }
    }

    //Identified based on returnType, instantiate appropriate Handler

    if(returnType.equals("Create"))
    {
        uploadAgent=new UploadXmlAgent(realPath,request,paramMap);
        uploadAgent.retrieveXml();
                    //SOME MORE OPERATIONS  
        return uploadAgent.uploadXml();
    }
    else if(returnType.equals("Update"))
    {
        System.out.println("Update");
        uploadAgent=new UploadXmlAgent(realPath,request,paramMap);
        uploadAgent.retrieveXml();
                    //SOME MORE OPERATIONS
        return uploadAgent.uploadXml();
    }
    else if(returnType.equals("Delete"))
    {
        //SOME OPERATIONS
    }
    return returnType;
}

根据对另一个答案的评论:

我可以使用request.getParameterMap(); 以任何方式与多部分?

如果这是您的唯一要求,那么只需创建一个Filter来完成解析工作,并为所有那些已分析的多部分项目准备请求参数映射,以便您可以继续使用getParameter()getParameterMap()并配合JSP / Servlet的。 你可以在这里找到一个完整的例子。


也许你应该看看Commons IO FileUpload。

为了改变提交的表单类型,您可以使用隐藏的输入字段

 <input type="hidden" name="formAction" value="uploadSomething">

然后你可以在你的Servlet中使用这个来根据你的表单来执行这个动作

String act = request.getParameter("formAction");
if(act.equals("uploadSomething")
{ 
// EDIT
if(ServletFileUpload.isMultipartContent(request))
{

// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();

// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);

// Parse the request
List /* FileItem */ items = upload.parseRequest(request);
}
}

而已。 希望这可以帮助。


嗨,我设法解决它。 我正在使用2个请求和一个会话变量。

第一次请求提交没有multipart的表单并将请求类型存储在会话变量中。

一旦第一个请求被发送,去找同样形式的第二个请求,但这次使用multipart并检查你的会话变量值并执行适当的处​​理程序。

链接地址: http://www.djcxy.com/p/64185.html

上一篇: Dynamic form, with or without multipart/form

下一篇: How do you overcome the html form nesting limitation?