我有一个视图数据源,它使用视图键来访问文档,并使用var“posts”重复显示它们。在重复中,我有一个带有var“post”的文档数据源,它使用posts.getUniversalID()得到文档的unid。
进一步向下重复我有另一个文档数据源“newcomment”,它是一个响应,并将父id作为:post.getDocument()。getUniversalID()
在新注释数据源下面的我有一个编辑框和一个提交按钮,它使用newcomment.save()
将注释保存为对“post”的响应这是我的问题
两个人访问同一个xpage。 personA进入页面并开始在帖子中写评论。同时,personB创建一个新帖子并在personA提交评论之前提交。现在发生的事情是评论被绑定到最新的帖子而不是发布的人员回复。
我也试过了另一件事,比方说那个数据库里有10个帖子。 personA和personB访问xpages。 personA开始在8号帖子上写评论,同时personB在数据库中创建了两个新帖子。当personA现在提交评论时,它似乎绑定到同一个索引,现在是两个帖子。但仍然是索引8.这是错误的帖子。
如果我将重复更改为“createControlsAtPageCreation”ie.e repeatControls = true,则注释将附加到正确的帖子,但后来我遇到另一个问题,即视图未更新以显示最新帖子。
我的重复是使用extlib中的动态内容控件动态加载的自定义控件。
这里的信息是我发现的有关repeatControls设置的信息
所以我的问题是我不明白发生了什么。为什么我的评论附在错误的父文件上?有没有办法可以防止这种情况,并且仍然可以正确显示新帖子
感谢您的帮助
答案 0 :(得分:1)
没有代码,有点难以想象究竟是什么在这里,但这看起来非常类似于重复控制和值绑定的问题。
长话短说,问题是将repeatControls属性设置为false。当数据绑定只对集合中的第一个元素起作用时 - 所有数据都以某种方式神奇地保存到第一个对象中!我设法通过使用动态内容控件重建和repeatControls设置为true的组合来实现这一点。只有数据绑定才是工作属性。
似乎你只是在重复渲染(这就是repeatControls设置为false的行为),jsf生命周期的解码阶段就变成了foobar。
答案 1 :(得分:0)
如果没有您的XSP标记,很难绝对确定,但似乎您的应用程序代码在页面加载期间每行创建并保留数据源和组件 - 因此也增加了组件树的整体大小和复杂性。您应该尝试仅在最终用户请求时延迟加载数据源的方法(例如:编辑/回复)。
有关使用此类动态方法的示例,请参阅XPages扩展库演示应用程序(XPagesExt.nsf)。特别是,请查看Core_InPlaceForm.xsp,它演示了在xp:repeat中使用xe:inPlaceForm控件。另请参阅Domino_ForumView.xsp,它演示了如何使用xe:forumView和xe:forumPost控件来管理和可视化分层线程。在实际保存任何给定的帖子或注释(fail,createConflict,force,exception)和文档锁定以实现高争用情况时,还要考虑最适合您的要求的并发模式。上述控件都提供了最高级别的动态控制和数据源创建和销毁。
请随时发送给我一个有用的示例数据库,我可以在那里了解您的确切用例 - DM我或给我发电子邮件。