PrimeFaces CommandButton: динамически включить / отключить значок

командная кнопка PrimeFaces позволяет указать значок:

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

однако мне нужно включить / отключить значок в зависимости от управляемого свойства компонента JSF.

пробовал

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

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

есть ли способ сказать PrimeFaces "я не хочу никакого значка вообще "(кроме вынимания

2 ответов


Я могу придумать 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' : ''}" />
    

хромой решение будет иметь 2 командные. Один с определением значка и один без. А затем сделайте правильный.