在jsf标记内调用if函数两次

时间:2012-10-02 20:41:47

标签: java function jsf if-statement

直接查看标记会更容易理解我的问题,问题在styleClass属性中进行:

<h:outputText value="#{prod.actualStock}" 
styleClass="
#{productBean.getSeverity(prod.actualStock, prod.replacementAlertLevel).equals('INFO') ?
'severity-info' : productBean.getSeverity(prod.actualStock, prod.replacementAlertLevel).equals('WARN') ?
'severity-warn' : 'severity-danger'}" />

现在,请注意我调用'getSeverity()'函数两次,三个返回值中的每一个都为outputText提供了不同的样式类。有没有办法只调用一次保持相同逻辑的函数?

''标签进入表格内。

2 个答案:

答案 0 :(得分:1)

您可以在ProductBean类中添加另一个包含ProductBean#getSeverity结果的属性,然后在托管bean中将其设置为<h:dataTable>

@ViewScoped
@ManagedBean
public class Bean {
    private List<ProductBean> productBean;
    //getters and setters...

    //I'm assuming you fill the list here
    @PostConstruct
    public void init() {
        productBean = ...
        for(ProductBean pb : productBean) {
            pb.setSeverityValue(pb.getSeverity(<parameters>));
        }
    }
}

在您的JSF代码中,您只需调用属性

<h:outputText value="#{prod.actualStock}"
    styleClass="#{productBean.severityValue.equals('INFO') ? 'severity-info' : productBean.severityValue.equals('WARN') ? 'severity-warn' : 'severity-danger'}" />

答案 1 :(得分:0)

为什么不让getSeverity方法将类名作为字符串返回?