2012-04-09 8 views
1

Я использую пользовательские свойства с настраиваемыми элементами управления. Есть ли такие вещи, как пользовательские методы? Скажите, что я хочу, чтобы что-то произошло в ЦК. Хорошим примером является метод show расширения диалогового окна. Если у меня есть cc с внутренним диалоговым окном расширения, я хочу, чтобы мой пользовательский элемент управления имел метод Show, который изолирует программиста конечного пользователя от метода Shore.Пользовательские методы пользовательского контроля?

Есть ли все равно для этого?

ответ

4

Во время выполнения все элементы пользовательского контроля становятся экземплярами класса UIIncludeComposite; как таковой, существует множество встроенных методов, которые вы можете вызывать против любого заданного экземпляра управления, но нет способа указать пользовательские методы, а не пользовательские свойства.

Есть, однако, по крайней мере, два пути, вы могли бы достичь результата вы после:

  1. Преобразования пользовательского элемента управления для компонента (this NotesIn9 episode описывает простейший подход к этому процессу). После того, как вы перенесли класс, созданный конструктором, который не будет переопределен каждый раз при создании NSF, вы можете добавить собственные методы, не опасаясь, что следующая сборка просто уничтожит их снова. Поскольку Custom Controls - это, по сути, просто внедрение IBM JSF 2.0 «составных компонентов», вы также можете создать компонент с нуля, который будет иметь такое же поведение, что и ваш существующий пользовательский элемент управления, но также поддерживает настраиваемое поведение. Обратите внимание, что любой подход не обязательно требует создания библиотеки OSGi ... вы можете определить эти компоненты непосредственно в NSF; вам нужно только нажать их в библиотеку, если вы хотите повторно использовать их в нескольких NSF без необходимости копировать различные файлы в каждый.

  2. В пользовательских свойствах вашего элемента управления включается одно свойство, которое принимает объект API. Другими словами, вы можете создать любой объект (например, класс Java или объект SSJS), который поддерживает настраиваемые методы, которые вы хотите определить, и передать , что объект связан с элементом управления. Затем вы можете вызвать эти методы, получив дескриптор объекта через карту свойств CC.

Например:

<myCC id="myCustomControl" API="#{someObject}" /> 

Если предположить, что все, что # {SomeObject} решает включает в себя метод шоу(), вы можете вызвать этот метод, получая ручку на экземпляре, который был принят в контроль:

var cc = getComponent("myCustomControl"); 
var ccProperties = cc.getPropertyMap(); 
var ccAPI = ccProperties.get("API"); 
ccAPI.show(cc); 

в приведенном выше примере, я передаю фактический пользовательский элемент управления методом шоу(), потому что сам объект не знает о Custom Control она была передана. Поэтому, если для этого метода нужно, например, получить дескриптор своих дочерних элементов для переключения своего отображаемого свойства, тогда ему нужен другой способ определения его контекста.

+0

Я думаю, что собираюсь пересмотреть свой вопрос и пойти по этому другому пути. Спасибо за помощь. –

0

Решение Тима с передачей объекта является отличным решением для этого.

Просто что-то, что появилось в моей голове, было бы легко сделать свойство, подобное предоставленному свойству элемента управления. Передайте значение и внутри пользовательского элемента управления сделайте что-нибудь, основанное на его значении, т.е. if true display dialog, else hide, в XPage во время выполнения измените это значение и частично обновите элемент управления, логика будет повторно запускаться этим, и элемент управления отобразит и т. д.

0

Другим решением может быть включение библиотеки JavaScript в ваши настраиваемые функции обеспечения контроля (ваши настраиваемые методы управления), где вам нужно будет передать идентификатор экземпляра настраиваемого элемента управления.

+0

Это интересно. Как это может быть сделано? Допустим, у меня один и тот же CC на моей xpage 4 раза. Есть ли способ вызвать метод на конкретном CC? –

Смежные вопросы