JSF f:ajax écouteur pas appelé
Je suis en train d'avoir une h:inputText passer avec un autre lorsque h:commandButton est cliqué. Pour ce faire, je suis en train d'attacher une f:ajax commande avec le h:commandButton, avec l'auditeur de la définition de la valeur sur le haricot (choix de l'affichage), et ré-rendu de la région.
J'ai essayé d'utiliser le port d'écoute sur le f:ajax, actionListener sur le h:commandButton action sur le h:commandButton à exécuter sur le f:ajax. Rien n'a fonctionné. Le mothed je suis en train d'appel n'est pas appelée à tous - il n'est pas println (voir ce qui suit).
La panelGroup est en cours de re-rendus, c'est pourquoi j'ai besoin de la onevent attribut qui ré-attache un peu de JavaScript (indice de texte basée sur le titre (j'avais une question précédente concernant cette).
La méthode que je suis en train d'appel:
public void morePressed(AjaxBehaviorEvent e) {
easySearch = !easySearch;
System.out.println("Made it!");
}
La JSF segment qui n'est pas de travail (note de la dernière h:commandButton est d'essayer de re-rendre la 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>
C'est le JavaScript (jQuery) que j'attache le Plus de bouton sur pageload. Je donne pas parce que je pense que ça pourrait aider, mais je ne sais pas si cela pourrait interférer avec l'ajax auditeur en quelque sorte:
$(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();
});
});
Je n'ai aucune idée. Comme je l'ai dit, j'ai essayé actionListener sur h:commandButton avec divers appraoches là, ainsi que les diverses approches de l'auditeur sur l'ajax. Tout le monde peut voir pourquoi l'auditeur ne fonctionne pas?
Mise à jour:
Ce que j'ai fait, avant d'avoir une réponse, est la conversion de tout afficher et masquer basé sur JavaScript, avec des trucs que j'ai besoin cachés s'ils n'ont pas javascript initialement masqué, etc.
Cependant j'ai besoin de la f:ajax ailleurs, maintenant.
La solution est de sortir de l'événement="cliquer" sur le h:commandButton. Je encore ne sais maintenant pourquoi cela a été l'origine de la rupture, mais bon, tout ce qui fonctionne.
Vous devez vous connecter pour publier un commentaire.
Avez-vous vraiment avoir une fonction nommée
callFunctionAjaxRequest
dans votre code js? cause si ce n'est qu'il peut causer le bouton de ne pas travailler (parce que sa référencé à un pas d'une fonction existante) ,essayer cette version de votre bouton de commande (event="cliquez sur" peut être enlevé trop... et auto exécuter trop)
Autre chose , dans vos appels ajax de la partie supérieure de saisie de textes que vous avez obtenu de référence pour
searchBoxPeople
deux fois (au lieu desearchBoxFN
dans le deuxième f:ajax), fixer cause autrement lorsque l'on travaille avecsearchBoxFN
ses f:ajax va essayer d'exécuter un élément qu'il ne soit pas rendu ... (peut causer de sérieux problèmes...)p.s
prependId="false"
dans votreh:form
permettra de simplifier vos sélecteurs de jQuery...<h:commandButton type="button" styleClass="moreButtonAsText initiallyHidden" id="moreButtonAsText" value="▸More"> <f:ajax listener="#{peopleBean.morePressed}" render="peopleDataTable" event="click" /> </h:commandButton>
Avec une println en morePressed; il n'a jamais été imprimé. La prise deevent="click"
out atteint la println. Je ne joindre un jQuery basculer sur le bouton dans le fichier javascript, mais je ne pense pas que l'emporterait sur le comportement et provoquer cliquez sur pour pas de bulle ou quelque chose; je n'ai pas de propagation de l'arrêt.J'ai eu un problème de ce genre. Il s'est avéré qu'un inputText quelque part a une value="#{quelque chose.quelque chose}", où la propriété n'était pas réglable. L'exception n'a pas été signalé nulle part. J'ai dû mettre un point d'arrêt sur l'Exception et toutes les sous-classes de la trouver.
Le problème est que le managed bean doit être mis en place avec la signature à droite événement comme une entrée param. Grâce à de nombreux tests, j'ai essayé d'utiliser la même classe de prendre un AjaxBehaviorEvent. Comme dans l'exemple sur le forum précédent.
quand j'ai déclaré un ActionListener événement (compatible avec le bouton d'aci action), le haricot est exécuté!
J'ai eu le même problème et suivi votre exemple pour m'aider exactement. J'ai tout simplement (20 heures) fixé ce, en incluant les éléments suivants dans mon haricot:
Le premier est tiré!