我在jsf中有以下outputLabe代码:
<ice:outputLabel value="#{litApp.TipusTramitImportAtorgat}" rendered="#{tipusTramitBB.detailEntity.id == 12}"/>
只有当tipusTramitBB.detailEntity.id == 12时才出现,如果不是它必须有另一个值,无论如何都要在同一个outputLabel中执行它,或者我必须添加另一个如果tipusTramitBB.detailEntity出现的outputLabel。 id!= 12
答案 0 :(得分:0)
可以在一个标签中完成:
<ice:outputLabel value="#{tipusTramitBB.detailEntity.id == 12 ? litApp.TipusTramitImportAtorgat : litApp.otherValue}"/>
答案 1 :(得分:0)
虽然具有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";
}
}
}
您必须从tipusTramitBB
访问litApp
bean,但这是另一个问题。
这是一种通用方法,但通常更可取,特别是如果您有更复杂的业务逻辑。渲染属性具有另一种含义,它设计用于在渲染时偶尔隐藏元素。