2017-11-14 3 views
0

Ich habe einige Probleme mit meiner Anwendung. Ich habe einen <p:inputText> mit einem <p:ajax> Listener für das Änderungsereignis. Ich habe auch eine <p:commandButton> auf meiner Seite. Sowohl der Ajax-Listener als auch <p:commandButton> funktionieren wie erwartet, wenn nur versucht wird, einen aufzurufen. Das Problem tritt auf, wenn Benutzer bearbeitet und während immer noch auf das Feld konzentriert, versucht, die <p:commandButton> drücken, die das Änderungsereignis Ajax Listener (erwartet) ausgelöst, aber die <p:commandButton> wird nicht aufgerufen (nicht erwartet).PrimeFaces p: ajax event = ändern und p: commandButton aktion

Hier ist mein Code:

<p:inputText id="code" 
      value="#{myBean.code}" > 
    <p:ajax event="change" 
      listener="#{myBean.method1(myBean.code)}" 
      update="@(form :input:not(button))" /> 
</p:inputText> 

<p:commandButton id="searchButton" 
       value="Click me" 
       action="#{myBean.method2(myBean.code)}" 
       process="@this code" 
       update="@form" 
       oncomplete="PF('myDlg').show()" /> 

Ich habe this Frage, aber die Antwort scheint nicht für mich, das Problem zu lösen.

Ich habe versucht, die Schaltfläche auf dem Ajax-Listener zu verarbeiten, und ich habe versucht, die Schaltfläche in einer anderen Form und nicht zu aktualisieren dieses Formular von der Ajax-Listener, aber ich kann es nicht herausfinden. Ist das, was ich versuche, überhaupt möglich?

Vielen Dank im Voraus für jede Hilfe.

+0

Versucht, 'blur' anstelle von' change' zu ​​verwenden? – Kukeltje

+0

@Kukeltje ja, das gleiche Problem passiert –

Antwort

1

Wenn Ihr Projekt auf JSF 2.2 Runtime läuft, können Sie Pass-Through nutzen Attribute von Namespace http://xmlns.jcp.org/jsf/passthrough

ich das gleiche Problem (Taste nicht funktioniert am 1. drücken, auf der nächsten drückt es funktioniert) hatte und löste es auf folgende übrigens:

  1. Add-Namespace zu Ihrer Seite

    xmlns:pt="http://xmlns.jcp.org/jsf/passthrough" 
    
  2. hinzufügen oninput Ausprägungs e p:inputText (keine Notwendigkeit für p:ajax)

    <p:inputText id="code" value="#{myBean.code}" pt:oninput="onTextChanged()"/> 
    
  3. hinzufügen p:remoteCommand unten

    <p:remoteCommand delay="300" name="onTextChanged" 
           actionListener="#{myBean.method1(myBean.code)}" 
           update="@(form :input:not(button))" /> 
    

(Verzögerung nicht notwendig ist, aber es eine bessere Leistung gibt, wenn der Text schnell eingegeben wird.)

oninput Attribut hilft Ihren Eingabefeldern jede Art von Änderungsereignis zu erkennen: Tippen, Löschen, Kopieren, Pa stechen, schneiden, etc ... und über p:remoteCommand, um sie an Managed Bean zu übergeben.

Und Sie lösen auch "Knopf" Problem.

+0

Es funktioniert! Großes Denken. Danke vielmals –

Verwandte Themen