2012-06-04 3 views
6

PrimeFaces CommandButton игровых позволяет задать значок:PrimeFaces CommandButton: Динамически включить/отключить значок

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

Однако, мне нужно, чтобы включить/отключить значок в зависимости от JSF управляемых бин собственности.

Я попытался

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

Это работает для выбора различных иконок, но не позволяет отключить иконку в целом (то есть получить тот же рендеринг, как без атрибута icon=). Я могу вернуть пустую строку в getIconClass(), но PrimeFaces по-прежнему будет отображать дополнительные <span> для значка внутри кнопки, а стиль CSS заставляет этот диапазон быть видимым с помощью значка по умолчанию.

Есть ли способ сказать PrimeFaces «Я не хочу никакой иконки вообще» (кроме того, что вы вообще не снимаете атрибут icon=)?

+0

пытаются вернуть '' null' в getIconClass() ' – Daniel

+0

@Daniel: Это не появляется на работе. Если я это сделаю, значок по умолчанию все еще отображается. По-видимому, '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

Хм, используя , кажется проблематичным, мы можем позже решить использовать 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 командных кнопки. Один с определением значка и без него. А затем сделайте правильный.

+0

Да, это должно сработать, но это нехорошее решение из-за избыточности. – sleske

+0

Правда. Решения BalusC CSS не кажутся мне уродливыми. – roel

Смежные вопросы