щелкнул. Чтобы сделать это, я пытаюсь связать команду 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="▸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. Я до сих порзнаю, почему это приводило к поломке, но эй, что бы ни работало.