Прослушиватель JSF f:ajax не вызывается

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

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

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

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

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

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

<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 в другом месте.

Решение состоит в том, чтобы убрать event="click" из h:commandButton. Я до сих порзнаю, почему это приводило к поломке, но эй, что бы ни работало.

0
задан twmb 24 March 2012 в 19:53
поделиться