2012-06-04 20 views
6

PrimeFacesのコマンドボタンがアイコンを指定することができます:PrimeFacesコマンドボタン:動的/無効のアイコンを有効に

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

しかし、私は、Beanのプロパティを管理JSFに応じたアイコンを無効/有効にする必要があります。

は、私はこれは別のアイコンを選択するために動作しますが、完全にアイコンを無効にすることはできません

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

を試してみました(すなわちicon=属性を持たないように同じレンダリングを取得します)。 getIconClass()で空の文字列を返すことができますが、PrimeFacesはボタン内のアイコンに対して余分に<span>をレンダリングし、CSSスタイリングはこのスパンをデフォルトのアイコンで表示させます。

PrimeFacesに「アイコンを一切入れたくありません」(icon=属性を完全に取り除く以外に)と言う方法はありますか?

+0

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

'getIconClass()' – Daniel

+0

@Danielで 'null'なのでを返すようにしてみてください:仕事には表示されません。私がそうするならば、デフォルトのアイコンがまだ表示されます。どうやら、 'null'はJSF内部で' '' 'に変換されます。 – sleske

答えて

6

ボタンを複製せずに2つの方法が考えられます。

  1. 供給条件付き<c:if>によって追加さ<f:attribute>としてアイコン。

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

  2. 完全アイコンを非表示にスタイルクラスを設定し、条件付きで、それを提供します。

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

Hm を使用すると問題があるようですが、後でStateless JSFを使用することにします(http://industrieit.com/blog/2011/11/stateless-jsf-high-performance-zero-per-request-memory-overhead/)それはとは動作しません。 CSSトリックはちょっと醜いですが、おそらく最善の考えです。 – sleske

+1

このステートレスアプローチは、 ''条件がビュースコープであり、スコープが要求されていない場合、理論的に動作するはずです。同じビューが再利用されている間にリクエストごとに変更される可能性がある場合は、実際にはステートレスJSFでは機能しません。 – BalusC

+0

ここでは、上記のCSSアプローチを使用します。それは最小の侵入オプションのように見えた。ありがとう! – sleske

2

残念なことに、2つのコマンドボタンがあります。 1つはアイコン定義で、1つはアイコン定義なし。そして正しいものをレンダリングしてください。

+0

はい、それはうまくいくはずですが、冗長性のために素晴らしい解決策ではありません。 – sleske

+0

真。 BalusCのCSSソリューションはそれほど醜いとは思われません。 – roel