代码之家  ›  专栏  ›  技术社区  ›  Luca Molteni

如何在rich:dataTable中有条件地设置行的样式

  •  21
  • Luca Molteni  · 技术社区  · 17 年前

    如何根据条件更改特定行的样式?我可以在rich:column样式的类属性中使用JSF EL,但我必须为每一列编写代码。我想更改整行。

    7 回复  |  直到 17 年前
        1
  •  5
  •   Damo    17 年前

    特别是对于每一列:

    <rich:column styleClass="#{someBean.isSomething ? 'styleIfTrue' : 'styleIfFalse' }">
    
        2
  •  30
  •   Gene    17 年前

    但是,您始终可以尝试将所有列包装到 <rich:columnGroup> 它应该输出一个 <tr>

    编辑: (回应评论):如果列中的标题面被破坏,那么您也可以将它们分离到列组中。应该有效-您甚至可能不需要标题中的列组??

    <rich:dataTable>
      <f:facet name="header">
        <rich:columnGroup>
          <rich:column>Header 1</rich:column>
          <rich:column>Header 1</rich:column>
        </rich:columnGroup>
      </f:facet>
      <rich:columnGroup>
        <rich:column>Data</rich:column>
        <rich:column>Data</rich:column>
      </rich:columnGroup>
    </rich:dataTable>
    
        3
  •  3
  •   Sandip Armal Patil    14 年前

    这是我的代码,每行上都有一个复选框,如果选中复选框,则该行将高亮显示:

    <rich:dataTable value="#{manageOutstandingApprovals.approvalsResults}" var="approvals" styleClass="wp100 mtb20"  sortMode="single" id="approvalsTable"  
                enableContextMenu="false" selectionMode="none" reRender="actions" rows="10">
    
            <rich:column styleClass="#{approvals.rowcolor}" width="5%" sortBy="#{approvals.documentType}" sortOrder="#{manageOutstandingApprovals.documentTypeSort}">
              <f:facet name="header">
                <h:outputText value="#{messages['outstandingApprovals.documentType']}"/>
              </f:facet>
              <h:outputText  value="#{messages[approvals.documentType]}" id="col1"/>
            </rich:column>
    
            <rich:column styleClass="#{approvals.rowcolor}" width="5%" sortBy="#{approvals.documentID}" sortOrder="#{manageOutstandingApprovals.documentIDSort}">
              <f:facet name="header">
                <h:outputText value="#{messages['outstandingApprovals.documentID']}"/>
              </f:facet>
              <h:outputText value="#{approvals.documentID}" id="col2"/>
            </rich:column>
    
            <rich:column styleClass="#{approvals.rowcolor}" width="10%" sortBy="#{approvals.dateSubmitted}" sortOrder="#{manageOutstandingApprovals.dateSubmittedSort}">
              <f:facet name="header">
                <h:outputText value="#{messages['outstandingApprovals.dateSubmitted']}"/>
              </f:facet>
              <h:outputText value="#{approvals.dateSubmitted}" id="col3"/>
            </rich:column>
    
            <rich:column styleClass="#{approvals.rowcolor}" width="15%" sortBy="#{approvals.submittedBy}" sortOrder="#{manageOutstandingApprovals.submittedBySort}">
              <f:facet name="header">
                <h:outputText value="#{messages['outstandingApprovals.submittedBy']}"/>
              </f:facet>
              <h:outputText value="#{approvals.submittedBy}"  id="col4"/>
            </rich:column>
    
            <rich:column styleClass="#{approvals.rowcolor}" width="20%" sortBy="#{approvals.orgName}" sortOrder="#{manageOutstandingApprovals.organizationSort}">
              <f:facet name="header">
                <h:outputText value="#{messages['outstandingApprovals.userOrg']}"/>
              </f:facet>
              <h:outputText value="#{approvals.orgName}"  id="col5"/>
            </rich:column>
    
            <rich:column styleClass="#{approvals.rowcolor}" width="5%" sortBy="#{approvals.value}" sortOrder="#{manageOutstandingApprovals.valueSort}">
              <f:facet name="header">
                <h:outputText value="#{messages['outstandingApprovals.value']}"/>
              </f:facet>
              <h:outputText value="#{approvals.value}"  id="col6"/>
            </rich:column>
    
            <rich:column styleClass="#{approvals.rowcolor}" width="20%" sortBy="#{approvals.approverUserName}" sortOrder="#{manageOutstandingApprovals.approverSort}">
              <f:facet name="header">
                <h:outputText value="#{messages['outstandingApprovals.approver']}"/>
              </f:facet>
              <h:outputText value="#{approvals.approverUserName}" id="col7"/>
            </rich:column>
    
            <rich:column styleClass="#{approvals.rowcolor}" width="15%" sortBy="#{approvals.dateAssigned}" sortOrder="#{manageOutstandingApprovals.assignedSort}">
              <f:facet name="header">
                <h:outputText value="#{messages['outstandingApprovals.assigned']}"/>
              </f:facet>
              <h:outputText value="#{approvals.dateAssigned}"  id="col8"/>
            </rich:column>
    
            <rich:column styleClass="#{approvals.rowcolor}" width="5%" sortBy="#{approvals.dateOutstanding}"  sortOrder="#{manageOutstandingApprovals.numOutstandingSort}">
              <f:facet name="header">
                <h:outputText value="#{messages['outstandingApprovals.daysOutstanding']}"/>
              </f:facet>
              <h:outputText value="#{approvals.dateOutstanding}"  id="col9"/>
            </rich:column>
    
            <rich:column styleClass="#{approvals.rowcolor}">
              <f:facet name="header">
                <h:outputText value="#{messages['outstandingApprovals.selectButton']}" title="#{messages['outstandingApprovals.selectButtonTitle']}"/>
              </f:facet>
              <h:selectBooleanCheckbox class="chkbx" value="#{approvals.selected}" id="selectBox" title="#{messages['outstandingApprovals.selectButtonTitle']}">
                <a:support event="onclick" ajaxSingle="true" reRender="approvalsTable" /> 
              </h:selectBooleanCheckbox>
            </rich:column>
          </rich:dataTable>
    

    public String getRowcolor() {
        if (selected) // selected is a variable whose value is from the checkBox  
            return "row-highlight-color"; // css id
        else
            return "row-white-color"; // css id
        }
    
        4
  •  2
  •   ZheFrench    12 年前

    使用 划船班

    这里是一个示例,其中我的值是布尔值。(rowkey是每行的索引,您必须在rich:datatable:

    rowKeyVar=“rowkey”

    “订单表偶数行”:“订单表奇数行”):“已找到”}

    CSS:

    .found
    {
    background-color: #FACC2E;
    }   
    .order-table-even-row
    {
    background-color: #FCFFFE;
    }
    
    .order-table-odd-row
    {
    background-color: #ECF3FE;
    }
    
        5
  •  0
  •   Chris Dale    17 年前

    您可以使用dataTables columnClasses和rowClasses属性。

    here

        6
  •  0
  •   Luke    17 年前

    我已经用Javascript做了一个混合解决方案。

    <rich:column styleClass="expired" rendered="#{documento.expired}">
    <f:facet name="header">
    Da evadere entro
    </f:facet>                  
    <h:outputText value="#{documento.timeAgoInWords}" />
    </rich:column>
    

    然后是Javascript(原型包含在Richfaces中)

    <script type="text/javascript">   
      function colorize() {    
        $$('td.expired').each(function(el) {
          el.up().addClassName('expired');      
        });
      }
    
      Event.observe(window, 'load', function() {
        colorize();
      });
    </script>
    

    这将添加一个带渲染的条件css类:

    <rich:column styleClass="expired" rendered="#{documento.expired}">
    

    使用javascript,我在每个td上循环css类过期 $$('td.expired') 并使用tr将相同的css类添加到上层节点 el.up() .

    Event.observe(window, 'load', function() {});
    

    这只是在DOM完全加载时运行函数。

        7
  •  0
  •   Rose    15 年前

    当使用h:datatable时,创建一个bean方法并调用它来确定样式。也许对于rich:datatable也可以这样做?

        public String getStyleSelectedOrderRows() {
            StringBuilder sb = new StringBuilder();
            String[] oddEven = new String[]{"oddRow,", "evenRow,"};
            int i = 0;
            for (MyObject object: myObjectList) {
                sb.append(object.isSelected() ? "selected," : oddEven[i++ % 2]);
            }
            return sb.toString();
        }

    在.xhtml中:

    <h:dataTable rowClasses="#{bean.styleSelectedOrderRows}"

    推荐文章