2012-06-04 7 views
6

PrimeFaces des Befehls ermöglicht ein Symbol angeben:PrimeFaces Befehls: Dynamisch aktivieren/deaktivieren Symbol

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

Allerdings muss ich aktivieren/deaktivieren Sie das Symbol in Abhängigkeit von einer JSF Bean-Eigenschaft verwaltet.

Ich versuchte

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

Dies funktioniert für verschiedene Symbole der Wahl, aber erlaubt nicht das Symbol ganz zu deaktivieren (das heißt das gleiche Rendering erhalten wie ohne das icon= Attribut). Ich kann eine leere Zeichenfolge in getIconClass() zurückgeben, aber PrimeFaces wird immer noch die zusätzliche <span> für das Symbol innerhalb der Schaltfläche, und CSS-Styling bewirkt, dass dieser Bereich mit einem Standardsymbol sichtbar ist.

Gibt es eine Möglichkeit, PrimeFaces zu sagen "Ich möchte überhaupt kein Symbol" (außer das Attribut icon= insgesamt zu entfernen)?

+0

versuchen zurückzukehren 'null' in' getIconClass() ' – Daniel

+0

@ Daniel: Das ist nicht zu funktionieren scheint. Wenn ich das tue, wird das Standardsymbol weiterhin angezeigt. Offensichtlich wird das 'NULL' in JSF in' "" übersetzt. – sleske

Antwort

6

Ich kann mir 2 Möglichkeiten vorstellen, ohne die Schaltfläche zu duplizieren.

  1. Versorgung das Symbol als <f:attribute>, die bedingt durch <c:if> hinzugefügt wird.

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

  2. eine Artklasse Set, das das Symbol ganz versteckt und es bedingt liefern.

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

    mit

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

Hm, mit scheint problematisch, können wir später entscheiden, Stateless JSF zu verwenden (http://industrieit.com/blog/2011/11/stateless-jsf-high-performance-zero-per-request-memory-overhead/) und das würde nicht mit funktionieren. Der CSS-Trick sieht ein bisschen hässlich aus, ist aber wahrscheinlich die beste Idee. – sleske

+1

Dieser zustandslose Ansatz sollte theoretisch funktionieren, wenn die ' 'Bedingung View-Bereich und nicht Request-Bereich ist. Wenn es sich bei jeder Anforderung ändern kann, während die gleiche Ansicht wiederverwendet wird, funktioniert sie in zustandslosen JSF-Dateien nicht. – BalusC

+0

Jetzt verwenden wir den oben beschriebenen CSS-Ansatz. Es schien die am wenigsten aufdringliche Option zu sein. Vielen Dank! – sleske

2

Eine lahme Abhilfe wäre, 2 Befehlsknöpfe zu haben. Eins mit Symboldefinition und eins ohne. Und dann rende den richtigen.

+0

Ja, das sollte funktionieren, aber es ist keine gute Lösung, wegen der Redundanz. – sleske

+0

Wahr. BalusC CSS-Lösungen scheint mir nicht so hässlich. – roel