JSF - 在Web浏览器上显示MS Word文档

时间:2010-12-15 15:20:07

标签: jsf

对于我的一个项目,我需要使用JSF 2.0在Web浏览器上显示MS word文档。 Web应用程序包含标题,内容等。应在内容部分动态显示MS Word文档(使用AJAX)。辅助bean读取ms word文档。我可以使用JSF作为独立的应用程序在浏览器上显示MS word文档。但是如果从另一个JSF文件调用它,这将无法工作。有人可以对这个问题有所了解吗?

JSF独立应用程序DiaplayDoc.xhtml。这将在浏览器上显示MS文档。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core">
    <f:event type="preRenderView" listener="#{DisplayDoc.downloadDoc}"/>    
</html> 

我需要从另一个包含其他jsf组件的jsf文件中调用此页面。将执行标题部分,但不执行页脚部分。 (当页脚设置为显示pdf插件或图像时,这可以正常工作。)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      > 
<h:body>        
        <h:form id="form1">
           <div id="header">
               Hello World
            </div>
           <div id="footer">
            <object data="<Project>/DisplayDoc.jsf" type="application/msword" width="100%" height="100%">
            </object>
            </div>
        </h:form>
</h:body>
</html>

bean部分包含

response.reset();
response.setHeader("Content-Type", "application/msword");
response.setHeader("Content-Length", String.valueOf(fFile.length()));
response.setHeader("Content-Disposition", "inline; filename=\"" + strFilepath + "\"");

1 个答案:

答案 0 :(得分:0)

JSF不可用于此目的。这样,您就可以使用HTML文档类型和二进制DOC内容周围的其他HTML标记来对DOC输出进行格式化。用servlet替换它,让<object data>指向servlet URL。如有必要,您可以将bean属性作为servlet请求参数传递,如

<object data="docservlet?param1=#{bean.param1}&amp;param2=#{bean.param2}">