代码之家  ›  专栏  ›  技术社区  ›  Roman

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

  •  3
  • Roman  · 技术社区  · 15 年前

    我和田里有个豆子 status . 取决于 地位

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

    if status == "Approved"
         cssClass = "green"
    if status == "Rejected"
         cssClass = "red"
    <span class="cssClass">Some info</span>
    

    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>
    

    3 回复  |  直到 15 年前
        1
  •  8
  •   BalusC    15 年前

    给双方(模型和视图)好处,而不是利用 enum

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

    它不仅在Java端处理起来更简单、更干净,而且还可以在EL中打印出来。

    <span class="#{bean.status}" />
    
        2
  •  4
  •   BalusC    15 年前

    JSF方法通常使用 rendered ?: 在你的课堂表达中。例如。

    <span class="status #{report.approved ? 'approved' : report.rejected ? 'rejected' : report.inProgress ? 'progress' : report.pendingHR ? 'pending' : ''}">
    
        3
  •  1
  •   ewernli    15 年前

    只是制造 cssStatus 支持bean中解析为正确CSS类的属性。

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

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

    好吧,这应该管用。

    推荐文章