我正在用java设计一个简单的CRUD框架,在我的HTML页面中,我有一个动态表单(2个使用multipart创建和更新文件,1个使用file upload和multipart删除文件)。服务器端,请求调制器使用request.getParameterMap();检查所有参数,并从这个隐藏类型输入<input type="hidden" name="returntype" value="Create">检查其是创建、更新还是删除操作。基于此,它将调用必要的处理程序。
注意:我的表单enctype和encoding设置为multipart/form data
注意:我的paramMap.size()在这里返回0,returnType得到的是空值,因此我得到的是空指针异常。
如果我根本不使用enctype和encoding,那么它运行得很好,但是我的文件上传又给了我一个异常,即encoding type应该是multipart/form数据。有没有人能帮我创建一个动态的CRUD表单?或者为什么我不能对多部分/表单数据使用request.getParameterMap();,谢谢:)
下面是请求调制器的代码

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中常用的方式进行合并。您可以找到这样一个过滤器here的完整示例。

关于java - 动态表格,带有或不带有多部分/表格数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5829052/

10-13 02:29