我可以在xpages中获取xsp文档的所有组件吗?

时间:2014-09-02 11:37:51

标签: xpages lotus-notes lotus-domino xsp

我有一个包含3个字段和1个富文本字段的简单文档。我还有一个带有3个简单编辑框控件和1个富文本的xpage。我的NotesXSPDocument的名称是document1。

问题1: 我可以获得带有xsp文档所有控件的向量吗?例如,我可以使用getComponent("fld1")getComponent("fld2")之类的内容,而不是使用getAllComponents()document1.getControls() ...等?这些方法当然不存在,所以我想问是否有办法做到这一点。我知道我可以通过调用document1.getDocument().getItems()来获取文档的所有项目(而不是XSP)。是否有类似的xsp?

问题2: 让我们说我们可以得到一个矢量,如上所述。然后,如果我遍历此向量以获取每个控件的值,是否有方法来检查它是富文本还是简单文本字段?

2 个答案:

答案 0 :(得分:4)

从技术上讲,是的,但不是很容易,这是可能有更好的方法来解决你想要解决的任何潜在问题的情况之一。

尽管如此,如果您想在页面上获取输入列表,XspQuery就是您的朋友:http://avatar.red-pill.mobi/tim/blog.nsf/d6plinks/TTRY-96R5ZT。这样,您可以使用“locateInputs”获取页面上所有输入的List,然后检查它们的值方法绑定,以查看字符串版本是否引用了您的变量名称。容易出错并且不漂亮,但它确实有效。由于它们是属性绑定,我不认为那里的startsWith过滤器会做你想要的。

或者,您可以从一开始就将组件绑定到Java类中的某些内容。我最近一直在做这样的事情(针对另一端)并且最初在这里描述它:https://frostillic.us/f.nsf/posts/my-black-magic-for-the-day。结果是,如果你正确地使用binding =“”属性,你可以得到一个引用给定对象属性的所有组件的列表。

至于问题的第二部分,如果你以这种或那种方式处理组件,你可以通过“组件实例com.ibm.xsp.UIInputRichText”来检查它是否是一个富文本控件。

答案 1 :(得分:3)

有点复杂,但是。 facesContext.getViewRoot()是一个UIViewRoot对象,因此它有List<UIComponent> getChildren()方法返回其子节点。

然而,由于它是一个树形结构,它的一些孩子将有额外的儿童组件。您必须遍历整个树以构建要查看的组件列表。

对于类型,您可以通过其类来确定组件的类型。例如,UIInput是一个文本框等