2016-04-25 8 views
0

Meine Absicht war es, Informationen zum Ausfüllen einer Textbereichskomponente zu zeigen. Wenn es den Fokus bekommt, zeige ich die Info, wenn es den Fokus verliert, lösche ich die Info. Ich möchte keinen Eingabewert verarbeiten, sondern nur die Fokus- und Blur-Ereignisse erfassen und den Listener anrufen und die Nachricht anzeigen/löschen.Warum ruft PrimeFaces 5.3 meine Listener-Funktion nicht auf, wenn ich die Ereignisse "Unschärfe" und "Fokus" erhalte?

Ich habe BalusC Kommentar zu bedingten Rendering gelesen, so dass ich meine bedingte Textnachricht zu einer "immer gerenderten" JSF-Komponente.

Meine "immer gerendert" f:outPutPanel Komponente wird im generierten XHTML-Code angezeigt, aber meine Listener-Funktion wird nie aufgerufen. Soweit ich weiß, ist die Methodensignatur von Primefaces-Listener einfach void somefunction() nicht wie in jsf ajax listener. Ich las auch BalusC's Kommentar über @this für das proccess Attribut, aber in meinem Fall scheint es nicht sinnvoll, da ich keine Eingabewerte fangen möchte. Ich bin ein Neuling für JSF und PrimeFaces, so dass jede Hilfe geschätzt wird.

Mein relevanter Ansicht-Schnipsel:

<h:form> 
    <h:panelGroup layout="block" id="info"> 
     <h:outputText rendered="#{ebookController.infoMessage != null}" value="#{ebookController.infoMessage}"/> 
    </h:panelGroup> 
    .... 
    <p:inputTextarea id="description" styleClass="form-control vspace" required="true" requiredMessage="Kérlek, add meg az e-könyv rövid leírását" value="#{ebookController.newEbook.description}" rows="20" cols="30" counter="display" maxlength="500" counterTemplate="{0} karakter lehet még" autoResize="false" validatorMessage="Az e-könyv leírása maximum 500 karakterből állhat"> 
     <f:validateLength maximum="500"/> 
     <p:ajax event="focus" process="@none" update="info" listener="#{ebookController.setTextAreaInfoMessage()}"/> 
     <p:ajax event="blur" process="@none" update="info" listener="#{ebookController.clearInfoMessage()}"/> 
    </p:inputTextarea> 
    <h:outputText id="display" /> 
</h:form> 

Mein relevanter Java-Code:

@Named(value = "ebookController") 
@SessionScoped 
public class EbookController implements Serializable { 

private String infoMessage; 

public String getInfoMessage() { 
    return infoMessage; 
} 

public void setInfoMessage(String infoMessage) { 
    this.infoMessage = infoMessage; 
} 

public void setTextAreaInfoMessage(){ 
    setInfoMessage("Tipp: Az e-könyved bemutatása során a fontos részeket emeld ki, és tagold a szöveget bekezdésekkel. Ha egy bekezdés végére értél, csak egy ENTER-t üss!"); 
} 

public void clearInfoMessage(AjaxBehaviorEvent e){ 
     setInfoMessage(""); 
} 
.... 
} 

Antwort

0

Lösung 1: Benutzer f: ajax

<f:ajax immediate="true" event="focus" process="@none" render="info" 
       listener="#{ebookController.setTextAreaInfoMessage()}" /> 
<f:ajax immediate="true" event="blur" process="@none" render="info" 
       listener="#{ebookController.clearInfoMessage()}" /> 

Managed Bean

public void setTextAreaInfoMessage() { 
     System.out.println("setTextAreaInfoMessage"); 
     setInfoMessage(
       "Tipp: Az e-könyved bemutatása során a fontos részeket emeld ki, és tagold a szöveget bekezdésekkel. Ha egy bekezdés végére értél, csak egy ENTER-t üss!"); 
    } 

    public void clearInfoMessage() { 
     System.out.println("clearInfoMessage"); 
     setInfoMessage(""); 
    } 

Referenz Problem with h:form and p:ajax

+0

Vielen Dank Ihre Antwort. Leider habe ich immer noch die folgenden Teilantwort genommen von Google Entwickler-Tools: ‚

5250913947076146787: 2613487393278789583 ‘ – Roland

+0

konnte ich Ihnen Fall in meiner Sandbox-Umgebung erstellen. Dann fand die Lösung von BalusC. Mein Test wurde mit Mojarra JSF 2.2.4, PrimeFaces-5.3 auf Tomcat 8 – Ravi

+0

Hallo, Ravi gemacht. Sie mussten die Methodensignatur von 'void setTextAreaInfoMessage()' nicht in 'void setTextAreaInfoMessage (AjaxBehaviorEvent e)' ändern. Ich benutze GlassFish 4.1.1 mit Mojarra 2.2.12. Mir sind wirklich die Ideen ausgegangen. – Roland