2014-09-02 67 views
1

我有一个简单的文档,有3个字段和1个富文本字段。我也有一个xpage 3个简单的编辑框控件和1个富文本。我的NotesXSPDocument的名称是document1。我可以在xpages中获得xsp文档的所有组件吗?

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

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

+0

我只是想知道为什么你想获得Xpage上的所有组件?对此需要什么?我可以看到文档上很少需要getItems,但我不明白为什么你需要Xpage上的所有组件。 – 2014-09-02 12:28:44

+0

我已经创建了一个类似gmail的“自动保存为草稿”的模块。所以当我打开要编辑的文档时,我会定期检查字段中是否有任何更改。我通过逐个获取字段来实现它,但是我想使它更加抽象和可重用。 – 2014-09-02 12:32:00

+0

您可能会更好地检查客户端的字段差异,然后触发您的服务器端保存,特别是因为您要“定期”轮询更改。 – 2014-09-02 12:34:35

回答

3

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

然而,因为它是一个树状结构,它的一些孩子将有其他子组件。您必须遍历整个树来构建您想要查看的组件列表。

对于类型,您可以根据类来决定组件的类型。例如,UIInput是一个文本框等

4

从技术上说,是的,但不容易,这是哪儿有可能是更好的方式来处理任何潜在的问题是要解决这些情况之一。

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

或者,您可以将组件绑定到从一开始就在Java类的东西。我最近一直在做这样的事情(为了不同的结局),最初在这里描述它:https://frostillic.us/f.nsf/posts/my-black-magic-for-the-day。结果是,如果你对binding =“”属性做了正确的巧妙处理,你可以得到引用给定对象属性的所有组件的列表。

至于问题的第二部分,如果您以某种方式获取组件的句柄,则可以通过执行“component instanceof com.ibm.xsp.UIInputRichText”来检查它是否为富文本控件”。

相关问题