J'ai trouvé un problème lors de l'utilisation de bootsfaces inputText avec ajax. J'utilise JSF 2.2, Bootsfaces 0.8.1 et Primefaces 5.3.Bootsfaces inputText perd le focus causé par l'utilisation d'ajax et la mise à jour de la valeur dans le bean
J'essaie d'entrer une valeur de date dans le champ inputText. Dès que j'entre la dernière valeur de la date, inputText doit déclencher l'événement change. À ce stade, je voudrais utiliser ajax pour appeler une méthode de bean. Le problème est que mon champ perd son focus dès que j'essaie d'entrer la dernière valeur et que la méthode n'a jamais été invoquée.
J'ai donc essayé un peu avec Primefaces et ça marche presque comme je le voulais. À ce stade j'ai eu différentes questions:
- Pourquoi mon champ inputText perd-il le focus en entrant la dernière valeur? (Bootsfaces)
- Pourquoi la méthode du bean n'est-elle jamais appelée après avoir perdu le focus? (Bootsfaces)
- Est-il possible d'invoquer la méthode du bean après que la valeur du bean ait été définie par le champ? (Primefaces)
J'ajouté le code ci-dessous, vous pouvez donc peut-être reproduire ce comportement.
test.xhtml - échantillon xhtml avec les deux champs primefaces et bootsfaces
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:b="http://bootsfaces.net/ui"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
<meta charset="UTF-8"/>
</h:head>
<h:body>
<h:form id="form">
<b:panel id="filterPanel" title="Filter properties" immediate="true" collapsed="false" collapsible="true">
<b:row>
<b:column span="12">
<b:inputText id="dateA" type="date" value="#{test.dateA}" immediate="true" class="form-control">
<f:ajax event="change" listener="#{test.searchA()}"/>
</b:inputText>
</b:column>
</b:row>
<b:row>
<b:column span="12">
<p:inputText id="dateB" type="date" value="#{test.dateB}" immediate="true" class="form-control">
<p:ajax event="change" listener="#{test.searchB()}"/>
</p:inputText>
</b:column>
</b:row>
</b:panel>
</h:form>
</h:body>
</html>
TestBean.java - mon haricot pour définir les valeurs et appeler des méthodes
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ManagedBean(name = "test")
@ViewScoped
public class TestBean {
private String dateA;
private String dateB;
public void searchA() {
System.out.println("Search A");
}
public void searchB() {
System.out.println("Search B");
}
public String getDateA() {
return dateA;
}
public void setDateA(String dateA) {
this.dateA = dateA;
System.out.println(dateA);
}
public String getDateB() {
return dateB;
}
public void setDateB(String dateB) {
this.dateB = dateB;
System.out.println(dateB);
}
}
S'il vous plaît aidez-moi à trouver une solution ou expliquez-moi ce que je fais mal ici.
Merci MWeber
Vous pouvez essayer BootsFaces 0.8.5 que nous avons publié il y a 2 jours. Il semble que nous avons résolu quelques bugs concernant cette question là-dedans. (L'auditeur est appelé correctement) Cependant, je ne suis pas sûr, pourquoi la méthode du haricot de back-up est appelée d'abord parfois et n'a pas le temps de rechercher pour le moment. Donc, malheureusement, je ne peux pas fournir une réponse complète tout à l'heure, mais je peux recommander d'essayer la nouvelle version :) – Zhedar
Aussi, je ne pouvais pas reproduire la perte de la mise au point du tout. Quel navigateur utilisez-vous? – Zhedar
J'utilise Chrome 50.0.2661.94. J'ai déjà essayé avec Bootsfaces 0.8.5. Ça fonctionne bien. Le problème est que je ne peux pas utiliser 0.8.5 à cause d'un problème/bug différent avec cette version. Il est possible que je pose une nouvelle question sur le problème en 0.8.5 mais actuellement je n'ai pas du tout le temps. Je pense que je vais essayer une solution de contournement sans ajax pour appeler la méthode avec un bouton ou quelque chose comme ça. Ou j'essaie à nouveau Primefaces en changeant la phase quand l'auditeur est invoqué. – mweber