Primefaces p:媒体标记在IE中不适用于PDF文件

时间:2014-10-13 15:57:25

标签: jsf primefaces

我在网络应用程序中包含了一个PDF查看器,可以在Chrome中正常运行。

但网络必须与IE8或更高版本兼容。

而且,遗憾的是,观众在IE中抛出错误,在任何版本中(总是如此友好......)

我正在使用Primefaces 3.4.1(抱歉,我无法更改版本)

代码:

uploadedView.xhtml :( Eplanation:逻辑在向导中分两步进行;首先进行上传,第二步进行查看)

<p:wizard widgetVar="wizard" flowListener="#{fileBean.onFlowProcess}" > 
    <p:tab id="upload" title="Upload docs">
        <p:panel header="Upload a PDF">
            <p:growl id="messages" showDetail="true" />

            <p:panelGrid columns="2">
                <p:fileUpload id="fileUploaded" value="#{fileBean.file}" mode="simple"/>
                <p:commandButton actionListener="#{fileBean.upload}" value="Upload" ajax="false"/>  
            </p:panelGrid>

        </p:panel>
    </p:tab>

    <p:tab id="view" title="View the uploaded doc">
        <p:panel header="View here the doc">
            <p:media value="#{fileBean.streamedContent}" width="100%" height="500px" player="pdf" rendered="#{fileBean.streamedContent != null}"/> 
        </p:panel>                  
    </p:tab>
</p:wizard> 

fileBean.java

@ManagedBean
@SessionScoped
public class FileBean implements Serializable{
    static final long serialVersionUID = 42L;

    private UploadedFile file;
    private String fileName;
    private StreamedContent streamedContent;
    private InputStream stream;

    public UploadedFile getFile() {
        return file;
    }

    public void setFile(UploadedFile file) {
        this.file = file;
    }


    public void upload() {
        if(file != null) {      
            // Saving the stream after uploading
            byte[] b = file.getContents();
            stream = new ByteArrayInputStream(b);
            stream.mark(0); //remember to this position!
            streamedContent = new DefaultStreamedContent(stream, "application/pdf");
        }
    }

    public StreamedContent getStreamedContent() throws IOException {
        // Getting the stream data
        if (file == null || file.getSize() == 0){
            return new DefaultStreamedContent(); 
        } else {
            if (streamedContent != null)
                streamedContent.getStream().reset(); //reset stream to the start position!
            return streamedContent;
        }   
    }

    public String onFlowProcess(FlowEvent event) {
        // Flow for wizard
        if (event.getNewStep() == null || event.getNewStep().isEmpty()){
            return event.getOldStep();
        }
        if (file == null || file.getSize() == 0) {
            return "not file";
        } else {
            return event.getNewStep();
        }     
    }

在Chrome中,服务器只显示此警告,但查看器工作正常:

ADVERTENCIA:JSF1091:no se haencontradoingún要么MIME para el archivo dynamiccontent。 Para resolverlo,agregueunasignacióndetipo MIME al archivo web.xml delaaplicación。

(Traslation:总之,dynamiccontent中缺少MIME类型)

但在IE中,除此之外,还会显示下一个:

13-oct-2014 17:52:53 org.primefaces.application.PrimeResourceHandler handleResourceRequest GRAVE:流式动态资源出错。 Laexpresiónnopuede ser nula

(Traslation:Expression不能为空)

观众在浏览器中弹出一个弹出窗口:

文件不以'%PDF-“等开头......

最重要的是,我不明白为什么服务器在IE上抛出异常。

抱歉我的英文和..

问候!

1 个答案:

答案 0 :(得分:1)

经过研究,我的结论是:

- &GT; IE中似乎不可能从Managed Bean流式传输。

两种选择:

问候