JSF verwendet EL, um die Präsenz globaler Nachrichten zu testen

7

Ich versuche, einen Block nur anzuzeigen, wenn globale Nachrichten in der JSF-Warteschlange vorhanden sind.

Ich habe versucht, rendered="#{not empty facesContext.getMessageList(null)}" zu verwenden, aber es wird immer als falsch ausgewertet.

Ich habe nur eine benutzerdefinierte EL-Funktion erstellt und in Java getestet.

z. : Meine el Funktion:

%Vor%

JSF-Seite:

%Vor%

Ich benutze Mojarra 2.1.5.

Vermisse ich etwas? Danke!

Bearbeiten: habe die folgenden Vorschläge versucht, aber bisher kein Glück:

  • #{not empty facesContext.getMessageList(null)} - & gt; immer falsch
  • #{! facesContext.getMessageList(null)} - & gt; Fehler
  • #{! empty facesContext.getMessageList(null)} - & gt; immer falsch
  • #{fn:length(facesContext.getMessageList(null)) > 0} - & gt; immer falsch
  • #{not empty facesContext.messageList(null)} - & gt; Fehler: Methode messageList nicht gefunden
  • #{not empty facesContext.messageList} - & gt; gibt true zurück, wenn es sich um einen Validierungsfehler handelt (ich möchte nur bei einem globalen Fehler true)
  • #{! facesContext.getMessageList(null).isEmpty()} - & gt; löst IllegalAccessException aus: Die Klasse javax.el.BeanELResolver kann nicht auf ein Member der Klasse java.util.Collections $ UnmodifiableCollection mit den Modifikatoren "public"
  • zugreifen
gonzalad 31.07.2012, 09:06
quelle

3 Antworten

18

keine benutzerdefinierte EL-Funktion erforderlich

probiere das

aus %Vor%

BEARBEITEN

Habe es nicht selbst versucht, aber probiere

aus %Vor%

Eine Idee ...

%Vor%     
Daniel 31.07.2012, 09:30
quelle
1

Versuchen Sie Folgendes:

%Vor%

anstelle von:

%Vor%

in der Antwort von Daniel.

Oder diese:

%Vor%

wo 'inputForm' ist:

%Vor%

Wenn Sie es nur an eines der verschiedenen Formulare auf Ihrer Seite adressieren möchten.

    
Aleksei Loginov 31.07.2015 04:58
quelle
1
Ich weiß, dass dies ein alter Faden ist, aber nachdem ich auf der Suche nach einer schwer fassbaren Lösung gekämpft habe, fand ich eine Erklärung für dieses Verhalten, und da ich diese Erklärung nirgendwo finden kann (weiß nicht warum), könnte das hilfreich sein.

Ich habe eine el Funktion geringfügig anders gemacht:

%Vor%

Der Unterschied ist der Parameter clientId . Das Verhalten dieser Funktion entspricht genau dem von #{not empty facesContext.getMessageList(clientId)} . Beim Debuggen des Codes habe ich festgestellt, dass, wenn ich die Funktion mit clientId = null aufgerufen habe, der Wert von clientId innerhalb der Funktion tatsächlich "" (leere Zeichenfolge) ist.

Danach habe ich die EL 3.0 Spezifikation konsultiert und gefunden:

  

Abschnitt 1.23 - Typenkonvertierung

     
    

Jeder Ausdruck wird im Kontext eines erwarteten Typs ausgewertet. Das Ergebnis der Ausdruckbewertung stimmt möglicherweise nicht exakt mit dem erwarteten Typ überein, sodass die in den folgenden Abschnitten beschriebenen Regeln angewendet werden. [...]

  
     

Abschnitt 1.23.2 - Coerce A to String

     
    

Wenn A null ist: return "" [...]

  

Ich denke also nicht, dass es eine Möglichkeit gibt, Nachrichten anzufordern, wobei clientId = null den Wert null als Parameter übergibt. Die einzige Möglichkeit besteht darin, eine Funktion zu verwenden, die dies ohne Verwendung eines Parameters oder Tests ausführt, wenn der Parameter auf die leere Zeichenfolge festgelegt wurde.

    
Luciano 11.04.2016 21:35
quelle

Tags und Links