2013-08-19 3 views
2

서비스를 호출하여 응용 프로그램에서 'MS-EXCEL'파일을 만들고 싶습니다. 응답으로 해당 파일을 반환하고 싶습니다. 파일 저장 대화 상자를 사용하여 클라이언트 시스템에 연결하십시오.GWT를 사용하여 파일을 저장하는 경로 선택 대화 상자를 얻는 방법

현재 프로그램의 경로를 하드 코딩하고 있습니다. 스윙을 사용할 수 없습니다. GWT에서 이것을 구현하고 싶습니다.

 if (name.equalsIgnoreCase("DigitalInputReport")) {  
        response.setHeader(
               "Content-disposition", 
               "attachment; filename=\"DIR_" 
                 + TimeZoneUtil.getPdfDate(fromDate) + "_" 
                 + TimeZoneUtil.getPdfDate(toDate) + ".csv\""); 

     List<ReportData> datas = new ArrayList<ReportData>(); 
     // Calling Service 
     datas = fleetTrackingServiceImpl.getDIN2SummaryReport(vehicle, 
            fromDate, toDate); 

     FileWriter writer = new FileWriter("C:\\Windows\\Temp\\DIR_" 
               + TimeZoneUtil.getPdfDate(fromDate) + "_" 
               + TimeZoneUtil.getPdfDate(toDate) + ".csv"); 
             try { 
              hashMapRunDur = datas.get(datas.size() - 1).getRunHashMap(); 
              hashMapStopDur = datas.get(datas.size() - 1) 
                .getStopHashMap(); 
              int runDur = 0, stopDur = 0; 
              writer.append("From Hour"); 
              writer.append(','); 
              writer.append("To Hour"); 
              writer.append(','); 
              writer.append("Minutes ON"); 
              writer.append(','); 
              writer.append("Minutes OFF"); 
              writer.append(','); 
              writer.append('\n'); 
              writer.append("Date"); 
              writer.append(','); 
              String dtChk = null, dtChkPrev = null; 
              for (int i = 0; i < datas.size(); i++) { 

               if (i == 0) { 
                dtChk = datas.get(i).getToDate(); 
                writer.append(datas.get(i).getToDate()); 
                writer.append(','); 
                writer.append('\n'); 
                writer.append(datas.get(i).getRunTime()); 
                writer.append(','); 
                writer.append(datas.get(i).getStopTime()); 
                writer.append(','); 
                writer.append(datas.get(i).getRunDur()); 
                writer.append(','); 
                writer.append(datas.get(i).getStopDur()); 
                writer.append('\n'); 
               } else { 
                dtChkPrev = dtChk; 
                dtChk = datas.get(i).getToDate(); 
                if (dtChkPrev.equals(dtChk)) { 
                 writer.append(datas.get(i).getRunTime()); 
                 writer.append(','); 
                 writer.append(datas.get(i).getStopTime()); 
                 writer.append(','); 
                 writer.append(datas.get(i).getRunDur()); 
                 writer.append(','); 
                 writer.append(datas.get(i).getStopDur()); 
                 writer.append('\n'); 
                } else { 
                 for (Map.Entry<String, String> e : hashMapRunDur 
                   .entrySet()) { 
                  runDur = (Integer.valueOf(e.getValue())); 
                  stopDur = (Integer.valueOf(hashMapStopDur 
                    .get(e.getKey()))); 
                  break; 
                 } 
// To delete first entry 
       Iterator<Map.Entry<String, String>> iterRun = hashMapRunDur 
                   .entrySet().iterator(); 
                 while (iterRun.hasNext()) { 
                  Map.Entry<String, String> entry = iterRun 
                    .next(); 
                  if (datas.get(i - 1).getToDate() 
                    .equalsIgnoreCase(entry.getKey())) { 
                   iterRun.remove(); 
                  } 
                 } 
                 Iterator<Map.Entry<String, String>> iterStop = hashMapStopDur 
                   .entrySet().iterator(); 
                 while (iterStop.hasNext()) { 
                  Map.Entry<String, String> entry = iterStop 
                    .next(); 
                  if (datas.get(i - 1).getToDate() 
                    .equalsIgnoreCase(entry.getKey())) { 
                   iterStop.remove(); 
                  } 
                 } 
                 writer.append(' '); 
                 writer.append(','); 
                 writer.append("Total ON/OFF"); 
                 writer.append(','); 
                 writer.append(formatIntoHHMMSSWithOutDay(runDur)); 
                 writer.append(','); 
                 writer.append(formatIntoHHMMSSWithOutDay(stopDur)); 
                 writer.append(','); 
                 writer.append('\n'); 

                 dtChk = datas.get(i).getToDate(); 
                 writer.append("Date"); 
                 writer.append(','); 
                 writer.append(datas.get(i).getToDate()); 
                 writer.append(','); 
                 writer.append('\n'); 
                 writer.append(datas.get(i).getRunTime()); 
                 writer.append(','); 
                 writer.append(datas.get(i).getStopTime()); 
                 writer.append(','); 
                 writer.append(datas.get(i).getRunDur()); 
                 writer.append(','); 
                 writer.append(datas.get(i).getStopDur()); 
                 writer.append('\n'); 
                } 
                if (i == datas.size() - 1) { 
                 for (Map.Entry<String, String> e : hashMapRunDur 
                   .entrySet()) { 
                  runDur = (Integer.valueOf(e.getValue())); 
                  stopDur = (Integer.valueOf(hashMapStopDur 
                    .get(e.getKey()))); 
                  break; 
                 } 
                 writer.append(' '); 
                 writer.append(','); 
                 writer.append("Total ON/OFF"); 
                 writer.append(','); 
                 writer.append(formatIntoHHMMSSWithOutDay(runDur)); 
                 writer.append(','); 
                 writer.append(formatIntoHHMMSSWithOutDay(stopDur)); 
                 writer.append(','); 
                 writer.append('\n'); 
                } 
               } 

              } 
             } catch (IOException e) { 
              e.printStackTrace(); 
             } finally { 
              writer.flush(); 
              writer.close(); 
             } 
       } 

은 서블릿 코딩입니다. 내가 호출 할 때 클라이언트 측에서 다운로드하는 파일에는 없지만 전체 내용은 여기에 출력됩니다 (c : // windows/temp/DIR _...). ('DigitalInputReport'만받습니다.) 친절 ... 간단히 설명해

csvBtn.addSelectionListener(new SelectionListener<ButtonEvent>() { 

      @Override 
      public void componentSelected(ButtonEvent ce) { 
       String gwt = GWT.getHostPageBaseURL(); 
       Window.open(
         gwt 
           + "generateCSVServlet?name=DigitalInputReport&fromDate=" 
           + fromDate + "&toDate=" + toDate + "&compName=" 
           + LoginDashboardModule.companyId 
           + "&brnchName=" + LoginDashboardModule.branchId 
           + "&userName=" + LoginDashboardModule.userName 
           + "&selectedVehicle=" + selectedVehicle, null, null);    
      } 
     }); 

이 클라이언트 측 코드를입니다

답변

3
File temp = new File("C:\\Windows\\Temp\\DIR_" 
             + TimeZoneUtil.getPdfDate(fromDate) + "_" 
             + TimeZoneUtil.getPdfDate(toDate) + ".csv"); 

try (BufferedReader br = new BufferedReader(new FileReader(temp))) 
           { 
            String isCurrentLine; 
            while ((isCurrentLine = br.readLine()) != null) { 
             response.getOutputStream().write("\n".getBytes()); 
             byte[] b = isCurrentLine.getBytes(); 
             response.getOutputStream().write(b); 
            } 

           } catch (IOException e) { 
            e.printStackTrace(); 
           } 

을 그의 소원과 클라이언트 컴퓨터.

1

사용는 FileUpload 경로를 얻을 수 있습니다.

A widget that wraps the HTML <input type='file'> element. 

그리고 ChangeEvent를 당신은 파일 이름/경로를 얻을 수 있습니다 : 내가 직접 서버 측에서 클라이언트 측에 파일의 내용을 반환하고에 파일을 저장할 수있는이 코드를 사용하여

FileUpload file = (FileUpload) event.getSource(); 
String filename = file.getFilename(); 
+0

실제로 서버 쪽에서 Excel 시트를 만들고 서버 쪽 코드에 이벤트가 없습니다. 버튼이 클라이언트 측 코딩입니다. –

+1

서버 또는 클라이언트 쪽에서 파일을 저장하려는 경우 이해가 안됩니다. 클라이언트 측에서는 클라이언트에서 파일 이름을 가져온 다음 파일 이름을 사용하여 Excel 파일을 저장할 수 있습니다. 그러나 저장 경로는 사용자의 브라우저에 의해 제어됩니다. 클라이언트 절대 경로에 직접 파일을 쓸 수 없습니다. – criszhao

+0

@criszhao 나는 그가 서버의 다른 장소에 서버에 생성 된 저장 파일을 원하지만 사용자가 서버를 저장할 위치를 선택하기를 원한다고 말할 것입니다. Ibadur 당신은 아마도이 서버/클라이언트 일을 지우려면 질문을 수정해야합니다 – Piro

관련 문제