JSF f: слушатель ajax не вызывается - PullRequest
0 голосов
/ 24 марта 2012

Я пытаюсь переключить h: inputText с другим при нажатии кнопки h: commandButton.Чтобы сделать это, я пытаюсь связать команду f: ajax с h: commandButton, при этом слушатель устанавливает значение для bean-компонента (решая, какой из них отображать), и повторно отображает область.

Я пытался использовать слушатель на f: ajax, actionListener на h: commandButton, действие на h: commandButton с выполнением на f: ajax.Ничего не получалось.Мотед, который я пытаюсь назвать, вообще не вызывается - нет печати (см. Далее).

PanelGroup перерисовывается, поэтому мне нужен атрибут onevent, который повторно присоединяет некоторый текст подсказки JavaScript на основе заголовка (у меня был более ранний вопрос, связанный с этим).

Метод, который я пытаюсь вызвать:

public void morePressed(AjaxBehaviorEvent e) {
    easySearch = !easySearch;
    System.out.println("Made it!");
}

Сегмент JSF, который не работает (обратите внимание на последний h: commandButton пытается повторно отрендерить panelGroup):

<h:form>
    <h:panelGroup id="switchSearchTexts">
        <h:inputText accesskey="s" alt="Search" id="searchBoxPeople" title="Search Plebeians" valueChangeListener="#{peopleBean.simplePersonQuery}" size="25" rendered="#{peopleBean.easySearch}">
            <f:ajax render="peopleDataTable" event="keyup" />
        </h:inputText>

        <h:inputText accesskey="s" alt="Search First Name" id="searchBoxFN" title="Search First Name" size="25" rendered="#{!peopleBean.easySearch}">
            <f:ajax render="peopleDataTable" event="keyup" />
        </h:inputText>
    </h:panelGroup>

    <div id="expandBox">
        <h:inputText id="searchBoxLN" alt="Search Last Name" styleClass="hideToggle" title="Search Last Name" size="25" />
        <h:inputText id="searchBoxAddress" alt="Search Address" styleClass="hideToggle" title="Search Address" size="25" />
    </div>

    <h:commandButton type="button" styleClass="moreButtonAsText" id="moreButtonAsText" value="&#x25b8;More">
        <f:ajax listener="#{peopleBean.morePressed}" render="switchSearchTexts" event="click" onevent="callFunctionAjaxRequest"  />
    </h:commandButton>

Это JavaScript (jQuery), который я прикрепляю к кнопке «Дополнительно» при загрузке страницы.Я даю это не потому, что думаю, что это может помочь, но я не знаю, может ли это каким-либо образом помешать слушателю ajax:

$(function() {
    textboxHint();
    $('input[id$="moreButtonAsText"]').toggle(function(e) {
        $(this).prop('value', '\u25c2Less');
        $(".hideToggle").show(300);
    }
    , function () {
        $(this).prop('value', '\u25b8More');
        $(".hideToggle").hide(100);
        $('input[id$="searchBoxAddress"]').prop('value', function() {
            return $(this).prop('title');
        });
        $('input[id$="searchBoxAddress"]').blur();
    });
});

Понятия не имею.Как я уже сказал, я пробовал actionListener на h: commandButton с различными аппроксимациями там, а также с различными подходами к слушателю на ajax.Кто-нибудь может понять, почему слушатель не работает?

Обновление:

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

Однако мне нужен f: ajax где-то еще, сейчас.

Решение - вывести событие«нажмите» на кнопку h: commandButton.Я все еще теперь знаю, почему это привело к его поломке, но эй, что бы ни работало.

Ответы [ 3 ]

3 голосов
/ 08 октября 2014

У меня была такая проблема. Оказалось, что где-то inputText имеет значение = "# {thing.something}", где свойство не может быть установлено. Об исключении нигде не сообщалось. Мне пришлось поставить точку останова на Exception и всех подклассах, чтобы найти его.

2 голосов
/ 24 марта 2012

У вас действительно есть функция с именем callFunctionAjaxRequest в вашем коде js?если это не так, это может привести к тому, что кнопка не будет работать (поскольку она ссылается на несуществующую функцию),

ищет в firebug возможные ошибки ...

попробуйте эту версию вашей командной кнопки (event = "click" тоже можно удалить ... и выполнить самостоятельно)

<h:commandButton type="button" styleClass="moreButtonAsText" id="moreButtonAsText" value="More">
    <f:ajax listener="#{peopleBean.morePressed}" render="switchSearchTexts" />
</h:commandButton>

Другое дело, в ваших вызовах ajax верхних входных текстов, которые вы получилидважды обращайтесь к searchBoxPeople (вместо searchBoxFN во втором f: ajax), исправьте его, иначе при работе с searchBoxFN его f: ajax попытается выполнить элемент, который не отображается ... (можетвызвать серьезные проблемы ...)

ps prependId="false" в вашем h:form упростит ваши селекторы в jQuery ...

1 голос
/ 04 июня 2012

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

когда я объявил событие ActionListener (соответствует действию кнопки jsf), bean-компонент выполняется!

У меня была та же проблема, и я последовал вашему примеру, чтобы помочь мне. Я просто (20 часов) исправил это, включив в свой текст следующее:

Первый теперь уволен!

public void actionListener(ActionEvent actionEvent) {
    // Add event code here...
    System.out.println("Made it!");
}

public void morePressed(AjaxBehaviorEvent e) {

    System.out.println("Made it!");
}
...