这是我们内部日志的一部分,在这两种情况下,我在BeforePageLoad事件期间打印了两个不同自定义控件的compositeData,一个是调用者,另一个是被调用者。
使用
传递参数dataSource" as-is"dataSource="#{javascript:compositeData.dataSource}
日志
14:37:29.876 {dataSource=com.ibm.xsp.model.domino.wrapped.DominoDocument@379c379c,dataSource2=com.ibm.xsp.model.domino.wrapped.DominoDocument@379c379c}
14:37:29.894 {dataSource=com.ibm.xsp.binding.javascript.JavaScriptValueBinding@31433143,dataSource2=com.ibm.xsp.binding.javascript.JavaScriptValueBinding@32613261}
出于某种原因,在第二个自定义控件(由第一个控件调用)中,dataSource丢失并变得完全无用。
问题
如果绑定突然改变类型,即从包装的DominoDocument到JavaScriptValueBinding,怎么会发生?我该怎么办呢?
PS dataSource2是一个微弱的尝试,从顶部向下传递第二个参数,绑定到相同的包装NotesDocument。
丑陋的解决方法
我现在使用主页面中声明的原始NotesDocument,而不是通过参数正确传递文档。我们需要这个快速修复才能继续,但是我喜欢对这个bug(XPages或我的?)以及处理参数传递的正确方法有解释。
答案 0 :(得分:2)
它在我的简单示例中运行良好:
主要XPage
<?xml version="1.0" encoding="UTF-8"?>
<xp:view
xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xc="http://www.ibm.com/xsp/custom">
<xp:this.data>
<xp:dominoDocument
var="document1"
formName="Test">
</xp:dominoDocument>
</xp:this.data>
<xc:datasource1
dataSource="#{document1}" />
</xp:view>
自定义控制&#34; datasource1&#34; (第一级)
<?xml version="1.0" encoding="UTF-8"?>
<xp:view
xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xc="http://www.ibm.com/xsp/custom"
beforePageLoad="#{javascript:print('1: ' + compositeData.dataSource)}">
datasource1
<xp:br />
<xc:datasource2
dataSource="#{compositeData.dataSource}" />
</xp:view>
自定义控制&#34; datasource2&#34; (第二级)
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
beforePageLoad="#{javascript:print('2: ' + compositeData.dataSource)}">
dataSource2
</xp:view>
服务器控制台上的输出显示两个级别的正确DominoDocument类型
HTTP JVM: 1: com.ibm.xsp.model.domino.wrapped.DominoDocument@7ee27ee2
HTTP JVM: 2: com.ibm.xsp.model.domino.wrapped.DominoDocument@7ee27ee2
您定义&#34;数据源&#34;的方式并不重要。属性类型 - 它适用于类型&#34;字符串&#34;并使用&#34; com.ibm.xsp.model.domino.DominoDocumentData&#34;。
也许,你可以从这个例子中找出你的代码中的不同之处。
答案 1 :(得分:0)
按设计工作。一个是将参数作为静态值传递,另一个是计算参数。
尝试传递绑定字符串,而不是尝试传递整个文档。这使得它更加灵活,因为您可以改变您对绑定到的内容(bean,范围,对象等)的想法。