user3636236
user3636236

Reputation: 1

Primefaces datatable, nested conditional row coloring

I'm using PF 3.4.1 and JSF. I would like to have a conditional selection of the css rowclass depending on two conditions:

One style should be for objects that are disabled, and one for objects that are expired.

I was able to put this two conditions in the same time, but, obviously, this cause a redundancy of css classes. I would like to have an overwrite of the classes in order to have predominance of the css class of disabled objects on expired objects.

Should look like this structure:

if (expired){ if (disabled){ return css1; } return css2 }

However, that is the code:

<p:dataTable id="results" var="utente" value="#{searchController.userList}" 
             paginator="true" rows="10" 
             rowStyleClass="#{user.expDate le user.currentDate ? 'rowdatatable3' : 'rowdatatable2'} #{user.enabled eq 'FALSE' ? 'rowdatatable1' : 'rowdatatable2'}"
             paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
             rowsPerPageTemplate="10,25,50">

rowdatatableX are css styles.

With this code, results have always rowdatatable2 or rowdatable1 and never the 3rd option.

My idea was something like this:

rowStyleClass="#{user.expDate le user.currentDate ? #{user.enabled eq 'FALSE' ? 'rowdatatable1' : 'rowdatatable3'} : 'rowdatatable2'} "

..but it doesn't work.

Please help to find a solution. Thanks.

Upvotes: 0

Views: 936

Answers (1)

Kuba
Kuba

Reputation: 2089

Try writing a method in your Bean (or transient method in user entity) that compares 2 dates expDate and currentDate

public boolean isExpired() {
    return getExpDate.before(getCurrentDate);    
}

If user.enabled is of type boolean skip the FALSE comparison. Since your table variable is utente you should use it! Your expression should look like that

"#{utente.expired ? (utente.enabled ? 'rowdatatable1' : 'rowdatatable3') : 'rowdatatable2'}"

so:

IF expired AND enabled -> 'rowdatatable1'
IF expired AND disabled -> 'rowdatatable3'
IF NOT expired -> 'rowdatatable2'

Upvotes: 2

Related Questions