2015-11-05 37 views
0

我有动态视图面板,我正在使用定制程序bean根据列名称来隐藏列。但是,我需要:Xpages:动态视图面板和DominoViewCustomizer bean

  1. 知道哪些观点在定制豆装入
  2. 在bean
  3. 获取文件句柄
  4. 在bean

为什么我需要这个附加其他列:在我的应用程序中,我正在处理文档映射。我想为映射的文档细节创建一个列。因为可以映射不同的文档类型,所以可以有多个列。

回答

2

查看您正在处理哪个视图并生成列定义(通常与视图中的视图相同,但可以添加其他视图)的工作是通过ViewFactory对象完成的,该对象由#getViewFactory在定制者bean。你可以看到一个重写方法并返回一个定制工厂的例子here。再例如,您还可以在ExtLib here中找到默认的源。 ViewFactory的工作是发出一个ViewDef,其中包含一系列ColumnDef s - 基本上是视图设计的抽象表示。这将覆盖1和3.

对于编号为2的文档取得处理是稍微间接的。由于定制程序bean仅在视图初始化期间执行,因此它不会直接挂钩呈现每行的过程(这是获取文档的位置)。但是,您可以将属性或内容设置为自己访问文档的方法/值绑定,以便每行执行它们。我这样做是为了让颜色列工作:我create an SSJS bindingstyle属性,然后可以看到viewEntry对象。如果您修改该代码,则可以编写一些类似#{javascript:var doc = viewEntry.getDocument(); ...other stuff here...}的SSJS。如果你这样做,你应该确保始终使用“viewEntry”作为视图中的var名称或use panel.getVar() to find the variable name dynamically

+0

谢谢杰西。我基于你的视图定制器得到了这个想法,但是希望如果我有快捷的起点,但显然没有。现在,我使用JSON方式并动态创建我的表(紧急交付),但将来我会尝试在创建视图后注入列。你认为这是否合理?**我绝对需要阅读Xpages和ExtLib中的所有类和接口。也许那时我可以构建一个解决方案,而不是在他们出现时照顾他们。 – Arun

+0

您可以通过在运行时访问组件树来动态添加列。如果你有一个getComponent(...)'获取dynamicViewPanel的地方,那么你可能会创建新的'UIDynamicColumn'(或者任何类)对象,然后用'addChild(...)' 。如果你想做一个没有ExtLib控件的ad-hoc动态视图面板,同样可以用标准viewPanel。 –