0

我有一件奇怪的事情,我在自定义控件中使用动态字段绑定。

字段绑定是这样创建的。

  • XPage(数据源“文档”放在这里)
    • 自定义控件(传入的字符串)(如果有错误,则获取错误)
      • 重复(CompositeData 被传递给返回 Rows、columns 字符串的 bean)
        • 重复(重复 1 个用于列的变量)
          • 自定义控件(传入字段名)

字段绑定是这样完成的 #{document[compositeData.fieldName]}

问题是当我保存 XPage 时,消息控件中出现错误

文档已被另一个用户保存 - 保存创建了一个新文档作为对该修改文档的响应。

并且所有字段都被清除。

有什么想法可以调试这个还是我缺少什么?

4

4 回答 4

1

“文档已被另一个用户保存”错误只是冰山一角——repeats 存在一些非常奇怪的问题,即重复绑定的字段并且 repeatControls 属性设置为 false。xpages 生命周期的解码部分无法正确处理 - 控件将丢失数据。您应该按照 Martin 的建议将 repeatControls 设置为 true 。

“重复控制变量不存在”可能是由删除重复设置为 true 的属性引起的。您可以通过将其更改为 false 或添加将保持重复值的附加数据上下文来解决此问题。

最后为此添加/删除功能您可以使用动态内容控制和 show(null) hack 来重建重复内容。

为了更好地管理这种复杂性,我建议您停止使用文档数据源并开始创建一些托管 bean。

如果您遵循我的建议,我保证您将获得您正在寻找的功能,因为我几乎没有运行良好的应用程序并且其中包含这种复杂的数据编辑器。

于 2013-02-18T09:30:57.610 回答
1

我不知道它是否会帮助你,但我将文档数据源和字段名称作为参数传递给 DynamicField 控件,并像这样使用它:

compositeData.dataSource[compositeData.fieldName]

数据源的类型是 com.ibm.xsp.model.DataSource,它在 Data Sources 下列为 dataInterface。

于 2013-02-18T17:40:08.737 回答
0

听起来您已经在 XPage 上多次定义了数据源(加上自定义控件)。该按钮或保存按钮具有 save="true" 但代码保存文档后端,或者多个位置的代码保存同一个文档。我使用了相同的方法将数据源传递给自定义控件,但这可能只是因为那是我在博客上看到的。

于 2013-02-18T19:36:10.960 回答
0

您是否为重复控件设置了 repeatControls="true"?

于 2013-02-17T20:38:33.270 回答