2012-06-04 15 views
6

PrimeFaces pozwala określić ikonę:PrimeFaces CommandButton: Dynamicznie włączyć/wyłączyć ikonę CommandButton

<p:commandButton value="Press me" icon="redBall" ... /> 

Jednak muszę włączyć/wyłączyć ikonę w zależności od JSF udało właściwość fasoli.

Próbowałem

<p:commandButton value="Press me" icon="#{bean.iconClass}" ... /> 

Działa wyboru różne ikony, ale nie pozwala wyłączyć ikonę całkowicie (tzn uzyskać taki sam jak rendering bez atrybutu icon=). Mogę zwrócić pusty ciąg znaków w getIconClass(), ale PrimeFaces nadal będzie renderować dodatkową <span> dla ikony wewnątrz przycisku, a styl CSS powoduje, że ten zakres jest widoczny przy domyślnej ikonie.

Czy istnieje sposób, aby powiedzieć PrimeFaces "Nie chcę żadnej ikony" (inne niż całkowite usunięcie atrybutu icon=)?

+0

próbie powrotu 'null' w' getIconClass() ' – Daniel

+0

@Daniel: To nie wydaje się działać. Jeśli to zrobię, domyślna ikona będzie nadal wyświetlana. Podobno 'null' zostaje przetłumaczone na' "" 'wewnątrz JSF. – sleske

Odpowiedz

6

Potrafię wymyślić 2 sposoby bez duplikowania przycisku.

  1. Supply ikona jak <f:attribute> który jest warunkowo dodane przez <c:if>.

    <p:commandButton ...> 
        <c:if test="#{not empty bean.icon}"><f:attribute name="icon" value="#{bean.icon}" /></c:if> 
    </p:commandButton> 
    

  2. Ustaw klasę w stylu, który ukrywa ikonę całkowicie i dostarczyć go warunkowo.

    .hideicon .ui-icon { display: none; } 
    .hideicon .ui-button-text { padding-left: 1em; } 
    

    z

    <p:commandButton ... icon="#{bean.icon}" styleClass="#{empty bean.icon ? 'hideicon' : ''}" /> 
    
+0

Hm, używanie wydaje się problematyczne, możemy później użyć Stateless JSF (http://industrieit.com/blog/2011/11/stateless-jsf-high-performance-zero-per-request-memory-overhead/) , a to nie zadziała z . Sztuczka CSS wygląda trochę brzydko, ale to chyba najlepszy pomysł. – sleske

+1

To podejście bez statu powinno teoretycznie działać, jeśli warunek "" ma zasięg widoku, a nie zakres żądania. Jeśli może zmienić się na każde żądanie, podczas gdy ten sam widok jest ponownie wykorzystywany, to faktycznie nie będzie działać w bezpaństwowym JSF. – BalusC

+0

Na razie użyjemy podejścia CSS opisanego powyżej. Wydawało się to najmniej uciążliwą opcją. Dzięki! – sleske

2

Kulawym rozwiązaniem byłoby posiadanie 2 przycisków poleceń. Jedna z definicją ikony i jedna bez. A następnie wyrenderuj poprawny.

+0

Tak, to powinno zadziałać, ale nie jest to dobre rozwiązanie ze względu na nadmiarowość. – sleske

+0

Prawda. Rozwiązania BalusC CSS nie wydają mi się brzydkie. – roel

Powiązane problemy