我已经尝试了几天在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(如在包含的内联示例中),表单将呈现,但是当我单击按钮(即触发器)时,我将收到一条错误消息。
谢谢!