JSF f:ajax-listener nicht aufgerufen
Ich versuche, mit einer h:inputText-Schalter mit einer anderen, wenn ein h:commandButton geklickt wird. Um dies zu tun, ich bin versucht zu binden eine f:ajax-Befehl mit den h:commandButton, mit dem Hörer Einstellung ein Wert an der bean (entscheiden, welche man angezeigt), und re-rendering-Bereich.
Habe ich versucht, mit Hörer auf das f:ajax, actionListener auf den h:commandButton action auf den h:commandButton mit execute auf das f:ajax. Nichts funktionierte. Die mothed ich bin versucht zu rufen, ist nicht genannt wird, an alle - es gibt keine println (siehe, was folgt).
Die panelGroup wird neu gerendert, das ist, warum ich brauche die onevent-attribute, die re-legt einige JavaScript-Hinweis-text auf der Grundlage der Titel (ich hatte eine frühere Frage mit dieser).
Die Methode, die ich bin versucht zu rufen:
public void morePressed(AjaxBehaviorEvent e) {
easySearch = !easySearch;
System.out.println("Made it!");
}
JSF-segment, das nicht funktioniert (beachten Sie die Letzte h:commandButton versucht, re-Rendern, die 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="▸More">
<f:ajax listener="#{peopleBean.morePressed}" render="switchSearchTexts" event="click" onevent="callFunctionAjaxRequest" />
</h:commandButton>
Dies ist der JavaScript (jQuery), die ich anfügen auf die Schaltfläche "Mehr" auf automatisch. Ich gebe es nicht, weil ich denke, es könnte helfen, aber ich weiß nicht, ob das nicht mit dem ajax-listener in irgendeiner Weise:
$(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();
});
});
Habe ich keine Ahnung. Wie gesagt, ich habe versucht actionListener auf h:commandButton mit verschiedenen appraoches, sowie verschiedene Ansätze, um den Hörer auf die ajax. Kann jemand sehen, warum der listener funktioniert nicht?
Update:
Was ich am Ende tun, bevor er eine Antwort, ist die Umwandlung alles, um das ein-und ausblenden, basierend auf JavaScript, mit Sachen, die ich brauchte, verborgen, wenn Sie nicht über javascript, ursprünglich verborgene, etc.
Aber ich brauche das f:ajax anderswo, jetzt.
Die Lösung ist event="click" auf den h:commandButton. Ich noch tun jetzt wissen, warum das so war, so dass es zu brechen, aber hey, was auch immer funktioniert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie wirklich eine Funktion namens
callFunctionAjaxRequest
in deinem js-code? denn wenn nicht kann es dazu führen, die Taste nicht zu funktionieren (weil die verwiesen wird, um eine nicht vorhandene Funktion) ,versuchen, diese version Ihrer Befehls-Taste (event="click" entfernt werden kann auch... und selbst ausführen zu)
Andere Sache , die Ihre ajax-Aufrufe der oberen input-Texte, die Sie bekam Verweis auf
searchBoxPeople
zweimal (anstatt zusearchBoxFN
im zweiten f:ajax), korrigieren Sie es sonst bei der Arbeit mitsearchBoxFN
f:ajax wird versuchen, auszuführen, ein element, das seine nicht gerendert wird ... (kann schwerwiegende Probleme verursachen...)p.s
prependId="false"
in Ihremh:form
vereinfachen Sie sich die Selektoren in jQuery...<h:commandButton type="button" styleClass="moreButtonAsText initiallyHidden" id="moreButtonAsText" value="▸More"> <f:ajax listener="#{peopleBean.morePressed}" render="peopleDataTable" event="click" /> </h:commandButton>
Mit einem println in morePressed; es wurde nie gedruckt. Unterevent="click"
aus erreicht println. Ich mache befestigen Sie ein jQuery-toggle der Schaltfläche in der javascript-Datei, aber ich glaube nicht, dass Kraft setzen würden, das Verhalten und die Ursache auf nicht sprudeln oder so etwas; ich habe keine Ausbreitung zu stoppen.Hatte ich ein Problem wie dieses. Es stellte sich heraus, dass ein inputText-irgendwo hatte einer value="#{etwas.etwas}", wo die Eigenschaft nicht einstellbar. Die Ausnahme war nicht gemeldet wird überall. Ich hatte einen Haltepunkt auf Exception und alle Unterklassen, um es zu finden.
Das Problem ist, dass die managed-bean aufgebaut werden muss, mit der richtigen Signatur Ereignis als input-param. Durch viele Tests, die ich versuchte zu verwenden, die der gleichen Klasse unter einer AjaxBehaviorEvent. Wie in dem Beispiel auf der vorherigen forum.
wenn ich für einen ActionListener event (konform mit der Taste jsf-action), die bean ausgeführt wird!
Ich hatte das selbe problem und folgte Ihrem Beispiel, um mir zu helfen genau. Ich habe einfach (20 Uhr) behoben, indem einschließlich der folgenden, die in meinem bean:
Die erste jetzt gefeuert wird!