2016-08-09 35 views
2

ich den Wert eines inputSecret mit onblur Funktionalität verarbeiten wollen, aber ich erhalten den Fehler nicht Methode getOnblur aufrufen konnteSpringBoot & Bootsfaces: Konnte nicht Methode aufrufen getOnblur

<b:column span="3"> 
    <p:outputLabel value="#{msg.confirmPassword}" /> 
    <b:inputSecret value="#{workerDetail.confirmPassword}" onblur="#{workerDetail.checkPassword}"/> 
</b:column> 

Dies ist die Methode auf die Backbohne:

public void checkPassword(AjaxBehaviorEvent event) 
{ 
    System.out.println(confirmPassword); 
} 

Wie kann ich lösen?

Antwort

1

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.

+0

Ich folge Ihren Anweisungen, aber Methode checkPassword wird nie aufgerufen! – xc93hil

+0

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 –

+0

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