2012-06-04 110 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