2012-06-04 100 views
6

PrimeFaces的命令按鈕允許指定一個圖標:PrimeFaces命令按鈕:動態地啓用/禁用圖標

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

不過,我需要啓用/禁用取決於JSF的圖標管理bean屬性。

我試圖

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

這適用於選擇不同的圖標,但不允許完全禁用圖標(即獲得同樣呈現不一樣的icon=屬性)。我可以在getIconClass()返回一個空字符串,但PrimeFaces仍將呈現額外<span>的按鈕內部的圖標,CSS樣式使這個跨度是一個默認的圖標可見。

有沒有辦法告訴PrimeFaces「我根本不需要圖標」(除了完全取出icon=屬性)?

+0

嘗試在'getIconClass()' – Daniel

+0

@Daniel返回'null':這似乎並沒有工作。如果我這樣做,默認圖標仍然顯示。顯然,'null'在JSF內部被轉換爲'「」''。 – sleske

回答

6

我能想到的2種方式而非複製按鈕。

  1. 供應的圖標作爲<f:attribute>其有條件通過<c:if>加入。

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

  2. 設置的樣式類完全隱藏圖標和有條件地提供它。

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

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

嗯,用似乎有問題,我們以後可能會決定使用無狀態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個CommandButton控件。一個有圖標定義,一個沒有。然後渲染正確的一個。

+0

是的,這應該工作,但它不是一個很好的解決方案,由於冗餘。 – sleske

+0

是的。 BalusC CSS解決方案對我來說似乎不那麼難看。 – roel