动态表单,有或没有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