Могу ли я получить все компоненты документа xsp в xpages?
У меня есть простой документ с 3 полями и 1 полем для расширенного текста. У меня также есть xpage с 3 простыми элементами управления для поля ввода и 1 форматированным текстом. Имя моего NotesXSPDocument - document1.
Вопрос 1: Могу ли я получить вектор со всеми элементами управления документа xsp? например, вместо использования getComponent("fld1")
, getComponent("fld2")
... и т.д., могу ли я использовать что-то вроде getAllComponents()
или же document1.getControls()
? Эти методы, конечно, не существуют, поэтому я спрашиваю, есть ли способ сделать это. Я знаю, что могу получить все элементы документа (не XSP), позвонив document1.getDocument().getItems()
, Есть ли что-нибудь подобное для xsp?
Вопрос 2: Допустим, мы можем получить вектор, как я описал выше. Затем, если я переберу этот вектор, чтобы получить значение каждого элемента управления, есть ли способ проверить, является ли он форматированным текстом или простым текстовым полем?
2 ответа
Технически, да, но не сразу, и это одна из тех ситуаций, где, вероятно, есть лучший способ решить любую проблему, которую вы хотите решить.
Тем не менее, если вы хотите получить список входных данных на странице, XspQuery - ваш друг: http://avatar.red-pill.mobi/tim/blog.nsf/d6plinks/TTRY-96R5ZT. При этом вы можете использовать "locateInputs", чтобы получить список всех входных данных на странице, а затем проверить их привязки метода значений, чтобы увидеть, ссылается ли версия строки на имя вашей переменной. Подвержен ошибкам и не очень, но это будет работать. Поскольку они являются привязками свойств, я не думаю, что фильтр стартов с этим будет делать то, что вы хотите.
В качестве альтернативы, вы можете связать компоненты с чем-то в классе Java с самого начала. Недавно я делал это (для другого конца) и первоначально описал это здесь: https://frostillic.us/f.nsf/posts/my-black-magic-for-the-day. В результате, при правильном понимании того, как вы выполняете свое свойство binding="", вы можете получить список всех компонентов, которые ссылаются на свойство данного объекта.
Что касается второй части вопроса, если вы ДЕЙСТВИТЕЛЬНО получаете указатель на компоненты тем или иным образом, вы можете проверить, является ли это расширенным текстовым элементом управления, выполнив "component instanceof com.ibm.xsp.UIInputRichText".
Немного сложно, но да. facesContext.getViewRoot()
является объектом UIViewRoot, поэтому он имеет List<UIComponent> getChildren()
метод, который возвращает своих детей.
Однако, поскольку это древовидная структура, некоторые из его дочерних элементов будут иметь дополнительные дочерние компоненты. Вы должны пройти по всему дереву, чтобы составить список компонентов, которые вы хотите увидеть.
Для типов вы можете решить, какой тип компонента по его классу. Например, UIInput - это текстовое поле и т. Д.