重复控件内的动态字段绑定

时间:2013-02-17 20:08:22

标签: xpages

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

字段绑定就是这样创建的。

  • XPage(数据源“文档”放在这里)
    • 自定义控件(传入的字符串)   (如果有的话会出错)
      • 重复(CompositeData传递给返回行,列的字符串的bean)
        • 重复(重复用于列的1个变量)
          • 自定义控件(传入字段名称)

字段绑定就像这样完成 的#{文件[compositeData.fieldName]}

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

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

所有字段都已清除。

任何想法如何调试这个或是否有我遗漏的东西?

4 个答案:

答案 0 :(得分:1)

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

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

最后为此添加/删除功能您可以使用动态内容控制并显示(null)黑客来重建重复内容。

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

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

答案 1 :(得分:1)

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

compositeData.dataSource[compositeData.fieldName]

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

答案 2 :(得分:0)

您是否为重复控制设置了repeatControls =“true”?

答案 3 :(得分:0)

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