在JSF页面中嵌入Orbeon 3.9 xform的最佳方法

时间:2012-01-11 03:44:10

标签: orbeon

我已经尝试了几天在JSF页面中嵌入Orbeon 3.9支持的xform而没有太多运气。我正在运行Orbeon作为“单独”部署(即oxf.xforms.renderer.deployment =单独),如果我直接从外部(非orbeon)Web应用程序访问xform,一切正常。当我尝试将xform嵌入到另一个网页中时出现问题 - 在我们的例子中,这是通过JSF和facelets生成的。我目前正在尝试使用JQuery加载xform,然后调用ORBEON.xforms.Init.document();在回调方法中:

<script type="text/javascript">
    $j(document).ready(function () {
         $j("#xform").load("#{facesContext.externalContext.requestContextPath}/xforms/test.xform?orbeon-embeddable=true", function(data) {
            if (typeof ORBEON != "undefined") { 
                if (!document.all) {
                    ORBEON.xforms.Init.document(); 
                } 
            } 
        }); 
   });
</script>

当我这样做时,页面似乎呈现正常并且一些小部件正常工作(例如日期选择器和基本字段验证),但是没有一个调用消息框的小部件工作。当任何窗口小部件或事件触发消息框时,我收到“客户端代码中的异常”错误,其中包含详细消息“消息:无法调用方法'setBody'为null”(Chrome)或“消息:this._messageDialog为null “(火狐)。

我意识到通过使用jQuery加载方法,我正在进行ajax调用,这可能在Orbeon 3.9中不受支持。 (我已经将oxf.xforms.ajax-portlet设置为true,以防这可能有所不同;但没有这样的运气。)

我愿意使用任何方法将xform嵌入到我们的JSF / facelet页面中,但是,我宁愿不使用iframe。我已经尝试了提供的include-form.jsp示例和其他方法,但是这个jQuery.load方法看起来最有希望 - 除了这个问题。

更新:经过更多研究,我已经进一步更新了这个问题。我只是在触发消息框时收到此错误。这是一个示例HTML页面,它调用我的xform:

<html>
<head>
    <script type="text/javascript" src="/portal_web/js/jquery/1.4.2/jquery-1.4.2.min.js"></script>
</head>
<body>
    <script type="text/javascript">
        jQuery.noConflict();
        var $j = jQuery;

        $j(document).ready(function () {
             $j("#xform").load("/portal_web/xforms/hello.xform?orbeon-embeddable=true", function(data) {
                if (typeof ORBEON != "undefined") { 
                    if (!document.all) {
                        ORBEON.xforms.Init.document(); 
                    } 
                } 
            }); 
       });
    </script>
    <div id="xform">Loading form...please wait...</div>
</body>

并且,这是一个展示此问题的示例xform:

<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml"
  xmlns:xforms="http://www.w3.org/2002/xforms"
  xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
  xmlns:ev="http://www.w3.org/2001/xml-events"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:fr="http://orbeon.org/oxf/xml/form-runner">
<xhtml:head>
    <xhtml:title>Say Hello</xhtml:title>
    <xforms:model>
        <xforms:instance>
            <dummy xmlns=""/>
        </xforms:instance>
    </xforms:model>
</xhtml:head>
<xhtml:body>
    <xhtml:p>
        <xforms:trigger>
            <xforms:label>Say Hello</xforms:label>
            <xforms:message level="modal" ev:event="DOMActivate">Hello!</xforms:message>
        </xforms:trigger>
    </xhtml:p>
</xhtml:body>

只要直接访问xform,此xform就可以直接在Orbeon Web应用程序中托管,也可以从“单独”部署访问。但是,如果我使用jQuery嵌入这个xform(如在包含的内联示例中),表单将呈现,但是当我单击按钮(即触发器)时,我将收到一条错误消息。

谢谢!

0 个答案:

没有答案