我有一个 servlet,它负责使用户能够更新报告表并同时上传报告。我已经编写了代码,使用户能够上传文档,并且还能够使用其他详细信息更新表格,例如提交日期等。但是,并非所有时候用户都必须上传文档。在这种情况下,用户应该仍然可以编辑报告的详细信息并稍后回来上传文件。即用户可以提交表单而无需选择一个文件,它仍然会更新表格。这部分不起作用。如果用户选择一个文件并进行一些更改。该代码有效。如果用户没有选择文件并尝试提交表单,它会重定向到我的 servlet,但它是空白的。没有堆栈跟踪。没有错误被抛出。以下是我的 servlet 中的部分代码:
if(param.equals("updateschedule"))
{
String[] allowedextensions = {"pdf","xlsx","xls","doc","docx","jpeg","jpg","msg"};
final String path = request.getParameter("uploadlocation_hidden");
final Part filepart=request.getPart("uploadreport_file");
int repid = Integer.parseInt(request.getParameter("repid_hidden"));
int reptype = Integer.parseInt(request.getParameter("reporttype_select"));
String webdocpath = request.getParameter("doclocation_hidden");
String subperiod = request.getParameter("submitperiod_select");
String duedate = request.getParameter("reportduedate_textfield");
String repname = request.getParameter("reportname_textfield");
String repdesc = request.getParameter("reportdesc_textarea");
String repinstr = request.getParameter("reportinst_textarea");
int repsubmitted = Integer.parseInt(request.getParameter("repsubmitted_select"));
String datesubmitted = request.getParameter("reportsubmitdate_textfield");
final String filename = getFileName(filepart);
OutputStream out = null;
InputStream filecontent=null;
String extension = filename.substring(filename.lastIndexOf(".") + 1, filename.length());
if(Arrays.asList(allowedextensions).contains(extension))
{
try
{
out=new FileOutputStream(new File(path+File.separator+filename));
filecontent = filepart.getInputStream();
int read=0;
final byte[] bytes = new byte[1024];
while((read=filecontent.read(bytes))!=-1)
{
out.write(bytes,0,read);
}
String fulldocpath = webdocpath+"/"+filename;
boolean succ = icreditdao.updatereportschedule(repid, reptype, subperiod, repname, repsubmitted,datesubmitted, duedate,fulldocpath, repdesc, repinstr);
if(succ==true)
{
response.sendRedirect("/webapp/Pages/Secured/ReportingSchedule.jsp?msg=Report Schedule updated successfully");
}
}
catch(Exception ex)
{
throw new ServletException(ex);
}
}
我还在自学javaee。任何帮助将不胜感激。也对其他选择持开放态度。我曾想过使用 jquery 来检测是否已选择文件,然后使用一组不同的代码。例如
if(param.equals("updatewithnofileselected"))
{//update code here}
但我认为必须有更好的解决方案。使用jdk6、servlet3.0。