Portlet application/pdf不是受支持的mime类型错误

Portlet application/pdf不是受支持的mime类型错误,pdf,jsf,primefaces,portlet,portletbridge,Pdf,Jsf,Primefaces,Portlet,Portletbridge,我面临这个错误-“application/pdf”不是受支持的mime类型。我正在尝试将p:editor的内容以pdf格式保存到本地计算机 进口 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import org.primefaces.model.DefaultStreamedContent; import org.primefaces.model.StreamedContent; impor

我面临这个错误-“application/pdf”不是受支持的mime类型。我正在尝试将p:editor的内容以pdf格式保存到本地计算机

进口

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Component;

import com.lowagie.text.Document;
import com.lowagie.text.PageSize;
import com.lowagie.text.html.simpleparser.HTMLWorker;
import com.lowagie.text.pdf.PdfWriter;
作用

        public StreamedContent getFile() {
                try {
                     ByteArrayOutputStream os = new ByteArrayOutputStream();

                     Document document = new Document(PageSize.LETTER);
                     PdfWriter pdfWriter = PdfWriter.getInstance(document, os);
                     document.open();
                     document.addCreationDate();
                    HTMLWorker htmlWorker = new HTMLWorker(document);
                     String str = "<html><head></head><body>"+ this.getMessage() +"</body></html>";
                     htmlWorker.parse(new StringReader(str));
                     document.close();

                     InputStream is = new ByteArrayInputStream(os.toByteArray());

                     file = new DefaultStreamedContent(is, "application/pdf", "ohyeah.pdf");
                     return file;
                  }
                  catch (Exception e) {
            return null;
                  }
            }

感谢Melloware指出错误与portlet相关

如果有人面临同样的问题,以下是对我有效的解决方案。根据你的需要调整它

public StreamedContent getFile() throws IOException, DocumentException {
        final PortletResponse portletResponse = (PortletResponse) FacesContext.getCurrentInstance()
                .getExternalContext().getResponse();
        final HttpServletResponse res = PortalUtil.getHttpServletResponse(portletResponse);
        res.setContentType("application/pdf");
        res.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
        //res.setHeader("Content-Disposition", "attachment; filename=\".pdf\"");
        res.setHeader("Content-Disposition", "attachment; filename="+subject+".pdf");
        res.setHeader("Refresh", "1");
        res.flushBuffer();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        OutputStream out=res.getOutputStream();
        Document document = new Document(PageSize.LETTER);
        PdfWriter.getInstance(document, baos);
        document.open();
        document.addCreationDate();
        HTMLWorker htmlWorker = new HTMLWorker(document);
        String str =this.getMessage();
        htmlWorker.parse(new StringReader(str));
        document.close();
        baos.writeTo(out);
        out.flush();
        out.close();
        return null;
    }

这似乎是一个糟糕的解决方案,因为您正从该方法返回
null
。如果要完全控制响应,而不使用任何PrimeFaces功能,为什么不使用中的自定义
资源
资源处理程序
。这个问题需要一个。您在视图中使用了哪些PrimeFaces组件?您使用的PrimeFaces版本是什么?您使用的Liferay Faces版本是什么?
public StreamedContent getFile() throws IOException, DocumentException {
        final PortletResponse portletResponse = (PortletResponse) FacesContext.getCurrentInstance()
                .getExternalContext().getResponse();
        final HttpServletResponse res = PortalUtil.getHttpServletResponse(portletResponse);
        res.setContentType("application/pdf");
        res.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
        //res.setHeader("Content-Disposition", "attachment; filename=\".pdf\"");
        res.setHeader("Content-Disposition", "attachment; filename="+subject+".pdf");
        res.setHeader("Refresh", "1");
        res.flushBuffer();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        OutputStream out=res.getOutputStream();
        Document document = new Document(PageSize.LETTER);
        PdfWriter.getInstance(document, baos);
        document.open();
        document.addCreationDate();
        HTMLWorker htmlWorker = new HTMLWorker(document);
        String str =this.getMessage();
        htmlWorker.parse(new StringReader(str));
        document.close();
        baos.writeTo(out);
        out.flush();
        out.close();
        return null;
    }