2013-03-29 42 views
2

我在我的web項目中使用JFileChooser,以便客戶端可以從服務器上下載某些文件,但是在測試期間,每當我點擊調用jfilechooser的按鈕時,它就會彈出在服務器系統上,而不是客戶端系統,爲什麼會發生這種情況,我如何解決它,下面是我使用的代碼。使用jfilechooser的問題

JFileChooser jfc = new JFileChooser(); 
jfc.setDialogTitle("Enter the path to save .pdf file"); 
jfc.setFileView(new FileView() { 
jfc.setMultiSelectionEnabled(false); 
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
int status = jfc.showDialog(null, "OK"); 
+0

你打算讓客戶瀏覽你的服務器文件系統嗎? –

+0

不,我使用jfilechooser爲客戶端提供路徑來存儲客戶端系統內的文件 – ferenit

+0

這是因爲退出文件選擇器的代碼已在服務器上執行。您需要使用小程序才能使其在客戶端上運行,但他們無法看到服務器上的文件 – MadProgrammer

回答

1

我想做同樣的在我的web應用程序,並且還試圖與弗里斯特JFileChooser的,也得到了問題,因爲你。然後我用「內容 - 性格」解決了這個問題。工作原理:用戶點擊我應用程序中的按鈕/鏈接,控制器從數據庫中獲取某些內容並將其寫入輸出流。用戶被詢問他是否想要打開該文件或將其保存在計算機上。下面是我如何做,在我的應用程序:

@Controller 
public class ExportPhonebook extends HttpServlet { 

private static final long serialVersionUID = 1L; 

@Autowired 
private PhoneBookService phoneBookSer; 

private void setResponseHeaderTXT(HttpServletResponse response) { 
    response.setContentType("text/plain; charset=UTF-8"); 
    response.setHeader("content-disposition", "attachment; filename=imenik.txt"); 
} 

@RequestMapping(value = "/exportPhonebook.html", method = RequestMethod.POST) 
public void exportPhonebook(Model model, HttpServletResponse response, HttpServletRequest request) { 

    List<User> listOfAllUsers = phoneBookSer.fetchAllUsers(); 
    String imenik = ""; 

    for (User user : listOfAllUsers) { 
     imenik = imenik + user.getPrezime() + " " + user.getIme() + ", Organizacijska jedinica: " + user.getOrganizacijskaJedinica() + 
     ", Telefon: " + user.getTelefon() + ", Faks: " + user.getTelefaks() + ", Email: " + user.getEmail() + 
     ", Lokacija: " + user.getLokacija() + ", Kat: " + user.getKat() + ", Soba: " + user.getBrojSobe() + ";\r\n" ; 
    } 


     try { 
      setResponseHeaderTXT(response); 
      OutputStream outputStream = response.getOutputStream(); 
      outputStream.write(imenik.getBytes(Charset.forName("UTF-8"))); 
      outputStream.flush(); 
      outputStream.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
} 

我已經做了類似的事情PDF文件:

@Controller 
public class ExportPhonebook extends HttpServlet { 

private static final long serialVersionUID = 1L; 

@Autowired 
private PhoneBookService phoneBookSer; 

private void setResponseHeaderPDF(HttpServletResponse response) { 
    response.setContentType("application/pdf"); 
    response.setHeader("content-disposition", "attachment; filename=imenik.pdf"); 
} 

@RequestMapping(value = "/exportPhonebook.html", method = RequestMethod.POST) 
public void exportPhonebook(Model model, HttpServletResponse response, HttpServletRequest request) { 

     try { 
      setResponseHeaderPDF(response); 
      Document document = new Document(); 
      ByteArrayOutputStream baosPDF = new ByteArrayOutputStream(); 
      PdfWriter pdfWriter = null; 
      pdfWriter = PdfWriter.getInstance(document, baosPDF); 
      PageNumbersEventHelper events = new PageNumbersEventHelper(); 
      pdfWriter.setPageEvent(events); 

      document.open(); 
      addMetaData(document); 
      addTitlePage(document); 
      ServletContext servletContext = request.getSession().getServletContext(); 

      String relativeWebPath = "img/image.png"; 
      String absoluteDiskPath = servletContext.getRealPath(relativeWebPath); 
      Image image = Image.getInstance(absoluteDiskPath); 
      image.setAbsolutePosition(450, 700); 
      document.add(image); 
      addContent(document); 
      document.close(); 
      pdfWriter.close(); 
      OutputStream os = response.getOutputStream(); 
      baosPDF.writeTo(os); 
      os.flush(); 
      os.close(); 
     } catch (Exception e) { 
       e.printStackTrace(); 
     } 
    } 
} 

我沒有抄在我爲我的PDF文件創建內容的幾種方法,但我認爲你不需要那樣。

+1

Thx eveyrone我以另一種方式修復了它 – ferenit

+0

@ferenit:你怎麼解決它。請發佈。我也面臨同樣的問題。 – 1355

+0

@ 1355我沒有。客戶後來決定不具備該功能 – ferenit