Я пытаюсь отобразить отчет в формате PDF в веб-приложении, я следую этому уроку здесь , и он прекрасно создает файл PDF, но у меня возникают проблемы при попытке отобразить его вбраузер.В моем xhtml у меня есть кнопка, при нажатии на которую вызывается функция, вызывающая сервлет.он идет в сервлет и создал штраф в формате PDF.но я не могу понять, как отобразить его на экране.Есть ли способ показать документ в новом окне браузера или новой вкладке?или даже тот же.
Я работаю с лицами Java Server 2.0 в Eclipse.и у меня есть сервер Tomcat 7.0.
в моем webxml Я добавил следующий код, указанный в примере:
<servlet>
<servlet-name>PdfServlet</servlet-name>
<servlet-class>com.bravo.servlets.PdfServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PdfServlet</servlet-name>
<url-pattern>/PdfServlet</url-pattern>
</servlet-mapping>
, и мой сервлет выглядит примерно так (почти так же, как в примере):
@WebServlet("/PdfServlet")
public class PdfServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private Font font = new Font(Font.FontFamily.TIMES_ROMAN, 12,
Font.NORMAL, BaseColor.RED);
/**
* Default constructor.
*/
public PdfServlet() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
invokePDFViewer(response);
Document document = new Document();
try{
PdfWriter.getInstance(document, response.getOutputStream());
document.open();
addContent(document);
document.close();
}catch(DocumentException e){
e.printStackTrace();
}
}
private void invokePDFViewer(HttpServletResponse response){
response.setContentType("application/pdf");
}
private void addContent(Document document)throws DocumentException {
PdfPTable table = new PdfPTable(2);
Paragraph paragraph = new Paragraph ("Este es un parrafo en celda 1", font);
table.addCell(paragraph);
table.addCell("2");
table.addCell("3");
table.addCell("4");
table.addCell("5");
table.addCell("6");
document.add(table);
}
}
HTML-файл, из которого я вызываю сервлет, выглядит следующим образом:
....
function callPdfServlet(){
$.ajax({
type: 'POST',
cache: 'false',
data: 'codeType=notUsed',
url: '/miloWeb/PdfServlet',
async: false,
success: function(data){
},
error: function (xhr, ajaxOptions, thrownError){
alert(ajaxOptions);
}
});
}
.....
<h:commandButton id="reportButton" action=" " styleClass="button" value="get Report" onclick="callPdfServlet();"></h:commandButton>
Итак, все, что он сейчас делает, этоЯ захожу в xhtml в своем браузере, нажимаю на кнопку, и он попадает в сервлет, проходит через код, а затем вот и все.Мой браузер просто перезагружает экран, и больше ничего не происходит.поэтому мне нужно показать PDF, который я только что создал.Заранее благодарим за помощь!
// ************************************************************************************ РЕДАКТИРОВАТЬ01.02.12:
после прочтения этого и этого
Я вижу, что действие в команде Button приведет меня к "response ".xhtml, где" response "- это строка, в которой я либо жестко прописал код, либо возвращается действием в управляемом компоненте.этот ответ (если он не помещен в мой файлface-config) перенесет меня на страницу, если она находится в той же папке, что и моя текущая страница.
, поэтому я считаю, что когда я помещаю "miloWeb / PdfServlet"в ответ на действие, он ищет страницу в той же папке (чего нет) и, поскольку ничего не находит, просто перезагружает страницу.И так как у меня есть точка останова в сервлете, я на 100% уверен, что он его не задевает.
, поэтому мой вопрос: как мне перенаправить мою страницу в miloWeb / PdfServlet ?? чтобы уточнить, это работает нормально, если я помещаю имя другого xhtml в ту же папку.поэтому он работает таким образом.
// Это то, что я пытался просто для справки: вместо того, чтобы выполнять вызов ajax, я изменил кнопку на
<h:commandButton id="reportButton" action="/miloWeb/PdfServlet" styleClass="button" value="get Report"></h:commandButton>
, но это простоперезагружает страницу и не возвращает меня к сервлету.
поэтому еще одну вещь, которую я попробовал, попытались выполнить, хотя действие кнопки, вызывающей управляемый компонент:
public String actionPdf(){
return "/miloWeb/PdfServlet";
}
снова, то же самое, функция возвращает строку, но она все еще нене отведи меня к сервлету.