Как условно раскрасить фон в ячейке таблицы?

Я рендеринг таблицы с p: dataTable (PrimeFaces) и то, что я хочу сделать, это цвет фона ячеек в зависимости от значения их содержимого. Это отличается от окраски строки или столбца - это отдельная ячейка.

сначала проблема CSS. Если я это сделаю:

                    <p:column headerText="xyzzy">
                        <div style="background-color: green">
                            <h:outputText value="#{rowVar.anumber}" >
                                <f:convertNumber groupingUsed="true" />
                            </h:outputText>                        
                        </div>
                    </p:column>

цвет фона только контент устанавливается, а не вся ячейка. Другими словами, обивка по-прежнему по умолчанию.

во-вторых, я хочу сделать стиль строковое выражение переменной. Я могу добавить функцию в резервный компонент, но как получить доступ к содержимому таблицы в методе? Это сработает?

<div style="#{bean.computeCSS(rowVar.number}">

EDIT:

Я придумал способ сделать условную часть, но мне все еще нужна помощь с частью CSS. Мое решение выглядит так:

                    <p:column headerText="xyzzy">
                        <div class="#{rowVar.anumber gt 0 ? 'colored' : ''}">
                            <h:outputText value="#{rowVar.anumber}">
                                <f:convertNumber groupingUsed="true" />
                            </h:outputText>                        
                        </div>
                    </p:column>

хотя мне не нравится получать фантазии в EL, это имеет то преимущество, что не нужно метод фасоли затыловки.

однако я все еще получаю только набор цветов фона, а не всю ячейку.

2 ответов


вы можете добавить класс css в строку и в столбец, который идентифицирует ячейку. Используйте dataTable (пример). Если вы хотите покрасить несколько строк:

<p:dataTable value="#{bean.rows}" var="rowVar"
     rowStyleClass="#{rowVar.firstCol gt 0 ? 'firstColColored' : ''}
                           #{rowVar.secondCol gt 0 ? 'secondColColored' : ''}">
     <p:column styleClass="firstCol">...
     <p:column styleClass="secondCol">

css:

.firstColColored .firstCol {
     background: pink;
}

Как насчет добавления заполнения в ваш класс, с px или процентами...

как то так

.colored{
    background-color:yellow;
    padding-top:25px;
    padding-bottom:25px;
    padding-right:50px;
    padding-left:50px;
}