0

ユーザーがレポート テーブルを更新し、同時にレポートをアップロードできるようにするサーブレットがあります。ユーザーがドキュメントをアップロードできるようにし、送信日などの他の詳細でテーブルを更新できるようにするコードを作成しました。ただし、ユーザーが常にドキュメントをアップロードする必要があるわけではありません。この場合、ユーザーがレポートの詳細を編集し、後で戻ってファイルをアップロードできるようにする必要があります。つまり、ユーザーはフォームを送信せずに送信できます。ファイルを選択しても、テーブルは更新されます。動かないのはこの部分です。ユーザーがファイルを選択して何らかの変更を加えた場合。コードは機能します。ユーザーがファイルを選択せず​​にフォームを送信しようとすると、サーブレットにリダイレクトされますが、空白です。スタックトレースなし。エラーはスローされません。以下は、サーブレットにあるコードの一部です。

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を使用。

4

1 に答える 1

0

これを試してください。

MultipartParser parser = new MultipartParser(request, 500000000, false, false, "UTF-8");
  Part part;
   while ((part = parser.readNextPart()) != null) {
      if(part.isParam()){
          if(part.isFile()){
              if(part.getName().equals("updatewithnofileselected")){
                   //update code here.
              } else if(part.getName().equals("updateschedule")) {
                   //updateschedule
              }
          }
    }
 }

Multipart-form を使用しているときにこれを使用しましたが、正常に動作しています。

于 2013-02-15T03:21:33.403 に答える