Как добавить поведение AJAX к динамически созданному компоненту в компоненте EJB? - PullRequest
0 голосов
/ 07 октября 2011

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

Вот проблема, которую я пытаюсь решить: я перехожу с JSF1.2 наJSF2.Все отлично работало в JSF1.2.Я переписал критический элемент, чтобы он был составным компонентом, который в основном представляет собой панель, созданную в моем компоненте поддержки путем добавления компонентов в коде.

В частности, у меня есть компоненты h: inputText и h: selectOneMenu, которые я создаю вкод вместе с «Применить» h: commandButton.Кнопка «Применить» имеет прослушиватель действий, который проверяет значения в компонентах h: inputText и h: selectOneMenu.Все это прекрасно работает, но когда я выбираю значения в компонентах h: inputText или h: selectOneMenu, я получаю исходные значения, а не новые значения, введенные пользователем.Как я уже сказал, это работало нормально в JSF1.2 (я получил новые значения), но не по какой-то причине в JSF2.

Я пробовал несколько вещей, чтобы обойти это, которые не работали, поэтому ярешил, что я добавлю поведение ajax к элементам h: inputText и h: selectOneMenu, и когда значения в этих компонентах изменятся, я мог бы вызвать другого слушателя вспомогательного компонента для поведения ajax, чтобы получить новые значения.

Я пытаюсь добавить поведение ajax к компоненту, который я создаю в коде (не связан с компонентом страницы).Я могу создать компонент без проблем.Однако проблема, с которой я сталкиваюсь, заключается в том, как добавить поведение ajax к компоненту.

Может ли кто-нибудь опубликовать пример кода, чтобы добавить поведение ajax для изменения значения или размытия?Вот код, который я использую для создания компонента в коде - как мне нужно изменить его, чтобы добавить поведение AJAX?hpg = new HtmlPanelGrid ();children = hpg.getChildren ();children.clear ();.... input = new HtmlInputText ();.... children.add (вход);

Какой код мне нужно добавить, чтобы заменить строку «добавить поведение ajax здесь», и каким будет аргумент для метода слушателя (аргумент для метода, который заменит метод ниже)?

public void myAjaxListener (?????) {...... {

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

Спасибо

1 Ответ

0 голосов
/ 07 октября 2011

Вот как вы можете динамически добавить AjaxBehaviorListener к вашему компоненту:

...
HtmlInputText inpuText = new HtmlInputText();
AjaxBehavior blurBehavior = new AjaxBehavior();
blurBehavior.addAjaxBehaviorListener(new BlurListener());
blurBehavior.setTransient(true);
inputText.addClientBehavior("blur", blurBehavior)
...

public class BlurListener implements AjaxBehaviorListener {

    public BlurListener() {
    }

    @Override
    public void processAjaxBehavior(AjaxBehaviorEvent event) {
        // do your job
        HtmlInputText inputText = event.getComponent(); // your input text component
        ...
    }
}

«размытие» представляет событие, когда этот слушатель будет запущен.Помните, что JSF-компонент должен поддерживать это событие, иначе оно не будет работать.
(Здесь вы можете увидеть под обложками и как создать пользовательский компонент AJAX http://weblogs.java.net/blog/driscoll/archive/2009/10/09/jsf-2-custom-java-components-and-ajax-behaviors?force=670)

Однако в вашем случаеЯ думаю, проблема в том, что кнопки ActionListener срабатывают до того, как фактические значения компонентов будут переданы.Вы можете решить эту проблему, переместив логику ActionListener в действие кнопки с помощью вышеупомянутого AJAX, возможно, найдя фактические значения в UIComponents (HtmlInputText, UISelectOne), но не уверен, что непосредственный атрибут также может повлиять на него.

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