如何根据条件更改 outputLabel 值?

How can i make outputLabel value change according to a condition?

我在 jsf 中有以下 outputLabe 代码:

<ice:outputLabel value="#{litApp.TipusTramitImportAtorgat}" rendered="#{tipusTramitBB.detailEntity.id == 12}"/>

它仅在 tipusTramitBB.detailEntity.id == 12 时出现,否则它必须具有其他值,无论如何要在同一个 outputLabel 中执行此操作,或者我必须添加另一个 outputLabel,如果 tipusTramitBB.detailEntity.id != 12

可以在一个标签中完成:

<ice:outputLabel value="#{tipusTramitBB.detailEntity.id == 12 ? litApp.TipusTramitImportAtorgat : litApp.otherValue}"/>

虽然具有 rendered 属性的 2 个标签可能具有相同的语义,但出于某些原因最好只有一个元素具有相同的行为:更清晰的代码因此更好的维护,ajax 重新渲染,等等

一个解决方案是(如@Geinmachi 所述)使用三元运算符:

<ice:outputLabel value="#{tipusTramitBB.detailEntity.id == 12 ? litApp.TipusTramitImportAtorgat : litApp.otherValue}"/>

另一种解决方案(我更喜欢这个)是将您的业务逻辑直接放在托管 bean 中(litApp 在您的情况下),例如:

public class LitApp {

    public Object getTipusTramitImportAtorgat() {
        if (tipusTramitBB.getDetailEntity.getId() == 12) {
            return "Value1";
        } else {
            return "Value2";
        }
    }
}

您必须从 litApp 访问 tipusTramitBB bean,但这是另一个问题。

这是一种通用方法,但通常更可取,尤其是当您有更复杂的业务逻辑时。 Rendered 属性还有另外一个含义,它是为在渲染时偶尔隐藏元素而设计的。