从单个doPost()方法多次调用jsp

时间:2015-06-24 20:05:15

标签: java jsp servlets

我正在使用PD4ML库将我的.jsp转换为pdf文件,我需要为值列表调用相同的jsp文件。 我在我的doPost()

中这样做
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String [] posSelected = request.getParameterValues("selectPOs");
    for(String eachPO: posSelected){

    request.getRequestDispatcher("CreateInvoices.jsp").forward(request,response);

//这不起作用,因为无法创建多个servlet实例。     }}

我得到java.lang.IllegalStateException:响应提交异常后无法转发。

如何多次调用相同的JSP?

由于 MekaM

4 个答案:

答案 0 :(得分:1)

  

如何多次调用相同的JSP?

多次加入。

request.getRequestDispatcher("CreateInvoices.jsp").include(request, response);

答案 1 :(得分:0)

在请求调度程序上使用Include而不是Forward。 你可以调用相同的jsp多次起诉包括。

它看起来像这样。

request.getRequestDispatcher("CreateInvoices.jsp").include(request,response);

答案 2 :(得分:0)

正如其他人所提到的,您只能在HTTP协议中为每个请求发送一个响应,因此您需要尝试其他方法。

在你的情况下,因为pd4ml是必需的,在这里你需要多个pdf因此创建多个jsp并不是理想的方式。因此,您应该通过代码创建多个pdf,而不是将jsp转换为pdf,如链接所示 http://pd4ml.com/examples

 private void runConverter(String urlstring, File output) throws IOException {

         if (urlstring.length() > 0) {
                if (!urlstring.startsWith("http://") && !urlstring.startsWith("file:")) {
                              urlstring = "http://" + urlstring;
                }

4               java.io.FileOutputStream fos = new java.io.FileOutputStream(output);

5               if ( proxyHost != null && proxyHost.length() != 0 && proxyPort != 0 ) {
                       System.getProperties().setProperty("proxySet", "true");
                       System.getProperties().setProperty("proxyHost", proxyHost);
                       System.getProperties().setProperty("proxyPort", "" + proxyPort);
                }

6               PD4ML pd4ml = new PD4ML();

7               try {                                                              
                       pd4ml.setPageSize( landscapeValue ? pd4ml.changePageOrientation( format ): format );
                    } catch (Exception e) {
                       e.printStackTrace();
                    }

                if ( unitsValue.equals("mm") ) {
                       pd4ml.setPageInsetsMM( new Insets(topValue, leftValue,
bottomValue, rightValue) );
                } else {
                       pd4ml.setPageInsets( new Insets(topValue, leftValue,
bottomValue, rightValue) );
                }

                pd4ml.setHtmlWidth( userSpaceWidth );

8               pd4ml.render( urlstring, fos );
         }
   }

答案 3 :(得分:0)

我已经使用jsoup.connect()。get()来实现我想要的目标。