Xpages 使用';旗帜';对于不同的文档。同一xpage上的结构

Xpages 使用';旗帜';对于不同的文档。同一xpage上的结构,xpages,Xpages,我的设想: xpage(文档内容)具有复杂的结构。我有一个打开此xpage的第一个按钮,在postNewDocument中有: Contr.replaceItemValue("txt_codformularmain","01") // I use this field as a flag. 现在,有另一个按钮组成相同的xpage。。。但在本例中,我确实希望xpage有所不同,换句话说,它有一些额外的/显示的字段 我可以在postNewDocument中添加另一个代码,如下所示: Contr

我的设想:

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

 Contr.replaceItemValue("txt_codformularmain","01") // I use this field as a flag. 
现在,有另一个按钮组成相同的xpage。。。但在本例中,我确实希望xpage有所不同,换句话说,它有一些额外的/显示的字段

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

Contr.replaceItemValue("txt_codformularmain2","01")
稍后,在一些视图中,我将通过这两个字段过滤列出的文档:一些视图将列出txt_codformularmain=01的文档,其他视图将列出txt_codformularmain2=01的文档,依此类推

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

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

在经典的lotusnotes编程中,我只使用了一个字段(标志),对于每个不同的按钮,在编写新文档之前,我只是在按钮的代码中更改了字段值:01、02等等

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

我可能会创建一个带有所需字段的新表单,并创建一个绑定到该表单的新XPage…

dominoDocument.isNewNote()将告诉您它是否是新文档。您可以基于此计算可见性

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

一旦您熟悉了该技术,就开始考虑使用dataContext来保存区域是否应可见,并在渲染属性中引用该dataContext变量。这样做的好处不仅在于性能,而且您可以为dataContext提供更好的变量名,以便在支持应用程序时更清楚地看到其背后的逻辑。例如,对于支持Notes客户端应用程序的人来说,不了解状态“01”或“02”的含义就不清楚了。“newDoc”、“published”等描述符在这方面有优势

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


但是,听起来您的XPage将足够复杂,在此阶段不会增加更多复杂度。

在页面加载之前打开页面时设置范围变量可能是更好的方法。接下来,使用不同的文档创建视图。并根据作用域变量加载这些视图,但如何将作用域变量设置为值-取决于单击的按钮?按钮不在同一个XPage上单击按钮时,可以设置可在整个应用程序中使用的sessionScop变量。并且Viewpanel应该包装在一个面板中,这样您就可以执行部分刷新以加载正确的数据。谢谢@Paul,谢谢您的建议。我将尝试一下。动态内容控制功能强大,在我的应用程序中经常使用它。不过,请小心使用动态内容控制。我有过一次不好的经历。你能怪我吗。但很难在内心深处留下书签。它就像一个单页应用程序,很难访问页面源。。但我认为你需要小心。