How to assign custom CSS class to arbitrary arbitrary rows of h:dataTable?

后端 未结 2 1246
抹茶落季
抹茶落季 2020-12-21 05:53

I\'m trying to assign a specific CSS class to specific rows of my . Is there some way to access and cutomize the resulting table rows?

相关标签:
2条回答
  • 2020-12-21 06:21

    I like @BalusC suggestion. If you want a second alternative, you can do this easily with javascript/JQuery.

    With JQuery you can do it like this

    (Note, this is just an example. I haven't tested it, and there is probably a better way of doing it)

    $(document).ready(function(){
      var counter = 0;
      $('#myTable').each(function() {
          counter = counter + 1;
          if(counter==3) {
            $(this).addClass('redRow');
            return;
          }
    
      });
    }
    
    0 讨论(0)
  • 2020-12-21 06:36

    Bind the rowClasses attribute to a bean property which returns the desired string of CSS classes.

    <h:dataTable value="#{bean.list}" rowClasses="#{bean.rowClasses}">
    

    with e.g.

    public String getRowClasses() {
        StringBuilder rowClasses = new StringBuilder();
        for (Item item : list) {
            if (rowClasses.length() > 0) rowClasses.append(",");
            rowClasses.append(item.getRowClass());
        }
        return rowClasses.toString();
    }
    

    Update to clarify, this way you have full programmatic control over the rowClasses string. Note that the above is just a kickoff example, it doesn't necessarily need to be obtained by Item#getRowClass() or so. You can even do it in a simple for loop with a counter.

    E.g.

    public String getRowClasses() {
        StringBuilder rowClasses = new StringBuilder();
        for (int i = 0; i < list.size(); i++) {
            if (rowClasses.length() > 0) rowClasses.append(",");
            rowClasses.append(selected.contains(i) ? "selected" : "none");
        }
        return rowClasses.toString();
    }
    

    where selected is a List<Integer>. If it contains 1, 2 and 5, then the returned string will look like as follows for a list of 10 items:

    none,selected,selected,none,none,selected,none,none,none,none
    
    0 讨论(0)
提交回复
热议问题