Próbuję wyświetlić blok tylko wtedy, gdy istnieją globalne wiadomości w kolejce JSF.JSF za pomocą EL do testowania obecności wiadomości globalnych
Próbowałem użyć rendered="#{not empty facesContext.getMessageList(null)}"
, ale zawsze jest to wartość false.
Jedynym sposobem, jaki znalazłem, jest utworzenie niestandardowej funkcji EL i przetestowanie jej w języku Java.
np. : moja funkcja el: Strona
public static boolean isFacesGlobalMessages() {
return ! FacesContext.getCurrentInstance().getMessageList(null).isEmpty();
}
JSF:
<h:panelGroup class="block1" layout="block" rendered="#{el:isFacesGlobalMessages()}">
<div class="block-warn-body">
<rich:messages id="msg" globalOnly="true"/>
</div>
</h:panelGroup>
Używam Mojarra 2.1.5.
Czy brakuje mi czegoś? Dzięki!
Edycja: próbowałem następujące propozycje, ale nie ma szczęścia do tej pory:
#{not empty facesContext.getMessageList(null)}
-> zawsze fałszywe#{! facesContext.getMessageList(null)}
-> Błąd#{! empty facesContext.getMessageList(null)}
-> zawsze fałszywe#{fn:length(facesContext.getMessageList(null)) > 0}
-> zawsze false#{not empty facesContext.messageList(null)}
-> Błąd: nie znaleziono metody messageList#{not empty facesContext.messageList}
-> zwraca wartość true, jeśli jest to błąd sprawdzania poprawności (Chcę tylko prawda o globalnym błędu)#{! facesContext.getMessageList(null).isEmpty()}
-> rzuca IllegalAccessException: Klasa javax.el.BeanELResolver nie może uzyskać dostępu do członka klasy java.util.Collections $ UnmodifiableCollection z modyfikatorów "publiczne"
Czy próbowałeś napisać to tak samo, jak w swojej funkcji? EL jest świadomy! operator. – Paranaix
Dzięki! Po prostu próbowałem (patrz edytuj powyżej), ale to nie zadziałało – gonzalad
@gonzalad, dunno, jeśli jest dobre dla ciebie, ale zaktualizowałem moją odpowiedź ... – Daniel