【问题标题】:Xpages using 'flags' for different doc. structure on same xpageXpages 对不同的文档使用“标志”。同一xpage上的结构
【发布时间】:2014-09-19 15:52:16
【问题描述】:

我的场景:

xpage(文档内容)具有复杂的结构。我有一个打开此 xpage 的第一个按钮,在 postNewDocument 中:

 Contr.replaceItemValue("txt_codformularmain","01") // I use this field as a flag. 

现在,有另一个按钮组成相同的 xpage ...但在这种情况下,我确实希望 xpage 有所不同,换句话说,有一些额外的/显示的字段。

我可以在 postNewDocument 中添加另一个代码,如下所示:

Contr.replaceItemValue("txt_codformularmain2","01")

稍后,在某些视图中,我将按这 2 个字段过滤列出的文档:某些视图将列出 txt_codformularmain=01 的文档,其他视图将列出 txt_codformularmain2=01 的文档,依此类推。

所有字段都在同一个表单元素上。 (我可以轻松创建 2 个不同的 xpage,包含 2 个文档内容,但在 onOpenonWebAccess 设置的表单属性中,我只能添加一个 xpage)

但是,我认为这不是最好的方法。因为在这两种情况下,都会发生postNewDocument,并且这两个字段的值都是01

在经典的 lotus notes 编程中,我只使用了一个字段(标志),并且对于每个不同的按钮,在按钮的代码中,我只是在组成 newDocument 之前更改了字段值:01、02 等。

我应该使用另一种/更好的方法吗?

我可能会创建一个包含所需字段的新表单,并创建一个绑定到该表单的新 XPage...

【问题讨论】:

  • 可能更好的方法是在页面加载前打开页面时设置范围变量。接下来使用不同的文档进行视图。并根据作用域变量加载这些视图
  • 但是如何将范围变量设置为一个值 - 取决于单击了哪个按钮?
  • 按钮不在同一个页面上
  • 当您单击一个按钮时,您可以设置一个 sessionScop 变量,该变量可以在整个应用程序中使用。并且 Viewpanel 应该被包裹在一个面板中,这样您就可以执行部分​​刷新来加载正确的数据。

标签: xpages


【解决方案1】:

dominoDocument.isNewNote() 会告诉你它是否是一个新文档。您可以据此计算可见性。

如果它基于字段值,则再次根据面板可见的值设置可见性 - 而不是 getComponent().getValue() 使用 dominoDocument.getItemValueString() 假设它是一个文本字段最佳实践。在绑定到您要检查的字段的控件的 onblur 事件中,触发部分刷新。如果页面上有验证,则需要修改默认的部分刷新设置。

一旦您对这种技术感到满意,就开始考虑使用 dataContext 来保存一个区域是否应该可见,并在呈现的属性中引用该 dataContext 变量。这样做的好处不仅在于性能,而且您可以为 dataContext 提供更好的变量名称,以便在支持应用程序时更清楚地显示其背后的逻辑是什么。例如,对于支持 Notes Client 应用程序的人来说,如果不寻找状态“01”或“02”的含义,就不清楚了。 “newDoc”、“published”等描述词在这方面有优势。

另一种优化方法是使用动态内容控件。

但听起来你的 XPage 已经足够复杂了,而在这个阶段不会增加更多的复杂性。

【讨论】:

  • 感谢@Paul 的建议。我会试一试的。
  • 动态内容控制很强大,在我的应用中用过很多
  • 不过要小心动态内容控制。我有一个糟糕的经历。我能错吗?但是很难在内心深处添加书签。它就像一个单页应用程序,很难找到页面源。功能强大,但我认为你需要小心。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多