PrimeFaces 3.2 selsectOneMenu valueChangeListener ne fonctionne pas
je souhaite récupérer la Liste basée sur la sélection des dropdownlist élément. pour cela, je suis en utilisant le code suivant qui n'est pas de travail:
<p:selectOneMenu style="width: 150px" value="#{watchBean.exchange}">
<f:selectItem itemLabel="NSE" itemValue="nse"/>
<f:selectItem itemLabel="BSE" itemValue="bse"/>
<p:ajax event="change" update=":frm" listener="#{watchBean.doScripList}" />
</p:selectOneMenu>
bean code:
public void doScripList(ValueChangeEvent e)
{
sl=getAllScripByExchange((String)e.getNewValue()); //sl is of type List<MasterScrip>
}
quand je debug , je vois que l'événement n'est pas déclenché et j'obtiens l'erreur suivante:
javax.el.MethodNotFoundException: Method not found: beans.watchBean@9ac2e4.doScripList(javax.faces.event.AjaxBehaviorEvent)
at com.sun.el.util.ReflectionUtil.getMethod(ReflectionUtil.java:155)...
quand j'ai omettre p:ajax échanger type est également pas get/set
ce qui est à l'origine de ce problème? quelle est la solution?
édité
renommé la méthode de wow() toujours la même erreur :
javax.el.MethodNotFoundException: Method not found: beans.watchBean@1732d83.wow(javax.faces.event.AjaxBehaviorEvent)
édité : managed bean code
import java.util.List;
import javax.inject.Named;
import javax.enterprise.context.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.xml.ws.WebServiceRef;
import service.MasterScrip;
import service.StatelessWebService_Service;
@Named(value = "watchBean")
@RequestScoped
public class watchBean {
@WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_8080/StatelessWebService/StatelessWebService.wsdl")
private StatelessWebService_Service service;
/** Creates a new instance of watchBean */
public watchBean() {
}
String uname,scripSym,exchange;
Integer scripID;
List<UserTrack> ut;
List<MasterScrip> sl;
public List<MasterScrip> getSl() {
return sl;
}
public void setSl(List<MasterScrip> sl) {
this.sl = sl;
}
public String getExchange() {
return exchange;
}
public void setExchange(String exchange) {
sl=getAllScripByExchange(exchange);
this.exchange = exchange;
}
public void wow(ValueChangeEvent e)
{
sl=getAllScripByExchange((String)e.getNewValue());
//setSl(sl);
//FacesContext.getCurrentInstance().renderResponse();
//sl=getAllScripByExchange(exchange);
}
- pour sanity check : essayez de renommer vos
doScripList
en quelque chose commewow
et l'essayer avec<p:ajax listener="#{watchBean.wow}"
.... (redémarrer votre serveur web...) - comme vous pouvez le voir la réponse donnée ci-dessous par @Sai Ye Yan Naing Aye, il dit que c'est un bug dans primefaces 3.2 . est-il vrai? ou dois-je aller avec ur solution?
- Je ne voudrais pas compter sur "ses un bug" sans lien de question ouverte + sa solution donnée est de JSF 1...
- renommé la méthode de wow() toujours la même erreur : javax.el.MethodNotFoundException: Méthode non trouvé: [email protected](javax.des visages.de l'événement.AjaxBehaviorEvent)
- vérifiez vos importations, somethiong comme ça ?
import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped;
- édité mon pour inclure managed bean code, j'ai vérifié, pls vérifier une fois si vous trouvez des erreurs...
- essayez de changer
@Named(value = "watchBean")
enManagedBean
et@RequestScoped
enimport javax.faces.bean.RequestScoped;
l'utilisation exacte des importations je vous ai dit avant... b.t.w êtes-vous vraiment travailler avec le CDI ? import javax.faces.bean.ManagedBean;
(je l'ai déjà écrit que ci-dessus...)- importés nécessaires importations comme vous l'avez suggéré, mais encore, la méthode n'est pas appelée et cette fois, aucune erreur n'est rencontrée, où suis-je mal?
- vous avez placé un point de rupture à l'intérieur de la méthode?
- ouais je l'ai gardé à l'intérieur de la méthode à sl=... sry pour mon commentaire précédent, la méthode n'est pas appelée ET l'erreur est toujours affiché - méthode pas trouvé de wow()
- supprimer
event="change"
et assurez-vous que leselectOneMenu
est à l'intérieur d'une forme et il n'y a pas des formulaires imbriqués - n'a donc toujours la même erreur : javax.el.MethodNotFoundException: Méthode non trouvé: [email protected](javax.des visages.de l'événement.AjaxBehaviorEvent)
Vous devez vous connecter pour publier un commentaire.
Essayez de changer
à
ajouter entre parenthèses à la fin de la méthode.
JSF est à la recherche d'une méthode
setDoScripList
dans le backing bean, mais lors de l'ajout de la parenthèse à la fin, vous êtes à l'appel de cette méthodedoScripList
explicitement.Atterri sur le même problème que le vôtre, mais j'ai compris que le valueChangeListener
fonctionne uniquement lorsque vous utilisez
<f:ajax>
tag et pas lorsque vous utilisez<p:ajax>
.Mais depuis selectOneMenu est de type
<p:selectOneMenu>
, donc<f:ajax>
ne fonctionne pas.J'ai travaillé en supprimant le paramètre
ValueChangeEvent e
et cela a fonctionné.Essayez donc d'un pas-de paramètre listener en cas de
<p:ajax>
tag.Remarque: ici, vous n'avez pas le paramètre d'événement de la sorte, il définit la nouvelle valeur en appelant respectifs des méthodes de définition, et vous pouvez consulter les mises à jour des valeurs dans l'écouteur.
Pour ce cas, vous devez également fournir des pièces d'identité à selectOneMenu comme ceci:
et puis vous ajoutez des méthodes get et set pour exchangeName dans votre classe d'Haricot:
Il est primefaces 3.2 bug, s'il vous plaît remplacer votre code comme le suivant.
Changer votre méthode aime ici;
Votre page est rechargée, en raison de l'événement onchange.