PrimeFaces CommandButton:动态启用/禁用图标

sle*_*ske 6 jsf primefaces

PrimeFaces的CommandButton允许指定一个图标:

<p:commandButton value="Press me" icon="redBall" ... />
Run Code Online (Sandbox Code Playgroud)

但是,我需要根据JSF托管bean属性启用/禁用图标.

我试过了

<p:commandButton value="Press me" icon="#{bean.iconClass}" ... />
Run Code Online (Sandbox Code Playgroud)

这适用于选择不同的图标,但不允许完全禁用图标(即获得相同的渲染,如没有icon=属性).我可以返回一个空字符串getIconClass(),但PrimeFaces仍然会<span>为按钮内的图标渲染额外内容,而CSS样式会使该范围显示为默认图标.

有没有办法告诉PrimeFaces"我根本不想要图标"(除了icon=完全取出属性)?

Bal*_*usC 6

我可以想到两种方法而不重复按钮.

  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>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 设置一个样式类,它完全隐藏图标并有条件地提供它.

    .hideicon .ui-icon { display: none; }
    .hideicon .ui-button-text { padding-left: 1em; }
    
    Run Code Online (Sandbox Code Playgroud)

    <p:commandButton ... icon="#{bean.icon}" styleClass="#{empty bean.icon ? 'hideicon' : ''}" />
    
    Run Code Online (Sandbox Code Playgroud)