2

クライアントがサーバーから特定のファイルをダウンロードできるように、Webプロジェクトで使用していますが、テスト中に、クライアントシステムではなくサーバーシステムでポップアップする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");
4

1 に答える 1

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 ファイルのコンテンツを作成するいくつかの方法をコピーしませんでしたが、それは必要ないと思います。

于 2013-03-29T10:31:09.907 に答える