如何使用JSF和Facelets实现一些if-then逻辑?

时间:2010-08-03 16:02:14

标签: java jsf jstl facelets

我有一个带有字段status的bean。根据{{​​1}}值,应该应用不同的css类来渲染它。

所以,我需要这样的东西(离真实伪代码很远):

status

我尝试应用if status == "Approved" cssClass = "green" if status == "Rejected" cssClass = "red" <span class="cssClass">Some info</span> 但是我无法使用facelets和jsf(但我听说这是可能的,也许是真相)。这是代码:

jstl

如何使用JSF / Facelets完成?

3 个答案:

答案 0 :(得分:8)

为双方(模型和视图)提供好处,而不是使用enum而不是四个独立的布尔值,这可能只会导致维护问题。

public enum Status {
    APPROVED, REJECTED, PROGRESS, PENDING;
}

在Java方面处理它不仅更容易,更清晰,而且您也可以在EL中打印它。

<span class="#{bean.status}" />

答案 1 :(得分:4)

JSF方法通常使用h-tag上的rendered属性。另请注意,EL(表达式语言)在JSF中非常具有表现力,因此您可以在类表达式中使用?:。 E.g。

<span class="status #{report.approved ? 'approved' : report.rejected ? 'rejected' : report.inProgress ? 'progress' : report.pendingHR ? 'pending' : ''}">

答案 2 :(得分:1)

只需将cssStatus作为支持bean中的属性解析为正确的CSS类。

public String getCssStatus() {
    if( this.status == .... )
       return "green";
    else 
       ...
}

然后

<span class="status #{report.cssStatus}">#{report.formattedStatus}</span>

AFAIK,这应该有用。