我正在使用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
答案 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()来实现我想要的目标。