BootsFaces nimmt einen etwas anderen Ansatz zu AJAX als die anderen JSF-Frameworks. Die Idee ist, einfach die JavaScript-Callback-Funktionen zu verwenden, um eine Methode in einer Java-Backend-Bean aufzurufen. Wir möchten jedoch auch die Kompatibilität zu anderen JSF-Frameworks beibehalten, so dass wir Ihrem Ansatz nicht folgen konnten, so verlockend er auch sein mag. Stattdessen haben wir uns entschieden, dem AJAX-Ruf durch ein Präfix ajax:
voranzukommen. Es folgt ein EL-Ausdruck, der auch die Parameterliste definiert. Mit anderen Worten: Anders als Standard-JSF übergibt BootsFaces den Event-Parameter nicht.
TL; DR: einfach Ihr onblur
Attribut wie so ändern:
<b:column span="3">
<p:outputLabel value="#{msg.confirmPassword}" />
<b:inputSecret value="#{workerDetail.confirmPassword}" onblur="ajax:workerDetail.checkPassword()"/>
</b:column>
Bitte beachten Sie die Klammern checkPassword
folgen. Es ist ein EL-Ausdruck, der ausgeführt wird, wenn das Ereignis ausgelöst und an das Java-Backend gesendet wurde.
Die resultierende Träger Bean-Methode muss nicht den Ereignisparameter:
public void checkPassword()
{
System.out.println(confirmPassword);
}
Der Unterschied zu Ihrem Ansatz ist, dass Ihr EL-Ausdruck ausgewertet wurde, wenn die Seite gerendert wird - das ist ein bisschen zu früh.
Ich folge Ihren Anweisungen, aber Methode checkPassword wird nie aufgerufen! – xc93hil
Es ist schwer, Ihr Problem aufzuspüren, ohne zu wissen, was Sie genau gemacht haben. Also schlage ich vor, Sie teilen ein wenig Reproduzierer Ihres Problems auf GitHut. In den meisten Fällen können wir so den Fehler schnell finden. Vielen Dank im Voraus, Stephan –
Jetzt funktioniert es! Die Methode checkPassword wird regelmäßig aufgerufen. Ich fügte in dieser Methode auch eine Faces Message ein: FacesContext.getCurrentInstance(). AddMessage (null, neue FacesMessage (FacesMessage.SEVERITY_WARN, Titel, Nachricht)); aber jedes Knurren wird gezeigt. Hier der GitHub Repo: https://github.com/cler27/TestWeb – xc93hil