Как мне, чтобы несколько компонентов отвечали на одно событие в JSF? - PullRequest
2 голосов
/ 03 ноября 2008

Вот сит:

  • У меня есть компонент JSF, который в основном представляет собой список «документов»
  • У меня есть любое количество компонентов для просмотра документов на одной странице.
  • Ни один из этих компонентов не "знает" друг о друге. Другими словами, они не могут быть настроены во время разработки для связи друг с другом или чем-то подобным.

Когда пользователь щелкает ссылку на документ, я хочу, чтобы каждый из компонентов средства просмотра документов был уведомлен.

По сути, идея заключается в том, чтобы зрители документов опубликовали тот факт, что они прослушивают событие определенного типа (скажем, «DocumentSelectedEvent»), которое будет запускать компонент списка документов.

Я могу придумать способы сделать это, которые не являются специфичными для JSF, но мне интересно, может ли модель событий JSF справиться с подобными вещами.

У кого-нибудь есть идеи?

Ответы [ 3 ]

1 голос
/ 24 июня 2009

Вам нужно просто связать компоненты с компонентом поддержки и использовать ValueChangeListener для уведомления компонента поддержки. Метод слушателя может изменить состояние других компонентов, которые связаны с соответствующими компонентами пользовательского интерфейса.

Вы пытаетесь сделать это "Ajax" без явной отправки страницы?

1 голос
/ 03 ноября 2008

Я не думаю, что есть способ сделать это со стандартной моделью событий JSF.

Есть ли способ связать компоненты с компонентом поддержки? Таким образом, когда происходит событие, вы можете просто просмотреть список компонентов и уведомить каждый из них.

0 голосов
/ 07 ноября 2008

ValueChangeEvent

Я не знаю, как вы реализовали свой список документов, но если бы это был, скажем, раскрывающийся список или какой-либо другой компонент списка из нескольких элементов, вы можете сделать событие изменения значения и принудительно отправить изменение для компонента. Затем в компоненте поддержки кода страницы вы можете вызывать методы для ваших зрителей для загрузки всего, что вам нравится.

В вашем jsf вы просто указываете обработчик изменения значения, который вы написали в компоненте поддержки.

   /**
     * Handle document click value change.
     * 
     * @param valueChangedEvent the value changed event
     */
    public void handleDocumentSelect(ValueChangeEvent valueChangedEvent) {
        String selectedDocument = valueChangedEvent.getNewValue();

        doDocViewer1DisplayMethod(selectedDocument);
                doDocViewe2DisplayMethod(selectedDocument);


    }   

Измените тег jsf, чтобы использовать новый обработчик события изменения значения, и принудительно отправьте.

 <f:componentTag 
   attr=xxx 
   attr=xxx 
   valueChangeListener="#{pc_BackingBean.handleDocumentSelect}"
   onChange=submit();>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...