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

Rom*_*man 3 java jsf jstl facelets

我有一个豆田status.根据status值,应该应用不同的css类来渲染它.

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

if status == "Approved"
     cssClass = "green"
if status == "Rejected"
     cssClass = "red"
<span class="cssClass">Some info</span>
Run Code Online (Sandbox Code Playgroud)

我试图申请,jstl但我不能使它与facelets和jsf(但我听说这是可能的,也许它的真相).这是代码:

<c:choose>
    <c:when test="#{report.approved}">
        <c:set var="statusClass" value="approved"/>
    </c:when>
    <c:when test="#{report.rejected}">
        <c:set var="statusClass" value="rejected"/>
    </c:when>
    <c:when test="#{report.inProgress}">
        <c:set var="statusClass" value="progress"/>
    </c:when>
    <c:when test="#{report.pendingHR}">
        <c:set var="statusClass" value="pending"/>
    </c:when>
</c:choose>
<span class="status ${statusClass}">#{report.formattedStatus}</span>
Run Code Online (Sandbox Code Playgroud)

如何使用JSF/Facelets?

Bal*_*usC 8

为了给双方(模型和视图)带来好处,而enum不是使用四个独立的布尔值,这可能毕竟只会导致维护问题.

public enum Status {
    APPROVED, REJECTED, PROGRESS, PENDING;
}
Run Code Online (Sandbox Code Playgroud)

它不仅在Java方面更容易和更清晰,而且你也可以在EL中打印它.

<span class="#{bean.status}" />
Run Code Online (Sandbox Code Playgroud)