Установка специфичности CSS для Primefaces с использованием Dynami c StyleClass - PullRequest
0 голосов
/ 04 августа 2020

У меня следующая сетка данных PrimeFaces:

<h:outputStylesheet name="/css/stocksStyle.css" />

    <h:form id="mainForm">
        <p:dataGrid id="prices" var="orderBooks" value="#{stocksView.latestPricesResults}" columns="3" rows="12">
                <f:facet name="header">
                    WST 100
                </f:facet>
                <p:column>
                    <p:panel header="#{orderBooks.bidOrderId.member.memberId}" styleClass="#{stocksView.priceChange == 1 and stocksView.priceChangeMember == orderBooks.bidOrderId.member.memberId ? 'stockPriceHigher' : (stocksView.priceChange == -1 and stocksView.priceChangeMember == orderBooks.bidOrderId.member.memberId ? 'stockPriceLower' : 'black')}">
            <h:panelGrid columns="1">
            <h:outputText value="#{orderBooks.price}" >
                <f:convertNumber type="currency" />
                </h:outputText>
            <h:outputText value="#{orderBooks.bidOrderId.member.party}" />
            <h:outputText value="#{orderBooks.lastUpdate}" />
            <h:panelGrid columns="2">
                <p:commandLink update="buyDetail" oncomplete="PF('buyDialog').show()" title="Buy Detail">
                    <h:outputText value="Buy"/>
                    <f:setPropertyActionListener value="#{orderBooks}" target="#{stocksView.selectedStock}" />
                </p:commandLink>
                <p:commandLink update="sellDetail" oncomplete="PF('sellDialog').show()" title="Sell Detail" rendered="#{stocksView.hasPortfolios[orderBooks.bidOrderId.member.memberId].booleanValue()}">
                    <h:outputText value="Sell"/>
                    <f:setPropertyActionListener value="#{orderBooks}" target="#{stocksView.selectedStock}" />
                    </p:commandLink>
                </h:panelGrid>
            </h:panelGrid>
            </p:panel>
            </p:column>
            </p:dataGrid>

Я устанавливаю цвет фона в зависимости от того, повысилась или снизилась цена:

<p:panel header="#{orderBooks.bidOrderId.member.memberId}" styleClass="#{stocksView.priceChange == 1 and stocksView.priceChangeMember == orderBooks.bidOrderId.member.memberId ? 'stockPriceHigher' : (stocksView.priceChange == -1 and stocksView.priceChangeMember == orderBooks.bidOrderId.member.memberId ? 'stockPriceLower' : 'black')}">

Однако я есть более подробные c CSS для панели, что означает, что фон компонента не изменяется правильно, я могу видеть его только в контуре компонента. Вот мой CSS:

.ui-panel.ui-widget.ui-widget-content.ui-corner-all {
border-radius: 0;
}

.ui-panel-titlebar.ui-widget-header.ui-helper-clearfix.ui-corner-all{
background: #666666;
border-radius: 0;
}

.ui-panel-content.ui-widget-content{
background: #000000
}

.ui-datagrid-header.ui-widget-header.ui-corner-top{
background: #666666;
border-radius: 0;
}

body .stockPriceLower{
background: red;
}

body .stockPriceHigher{
background: green;
}

Так что как-то мне нужно stockPriceHigher, чтобы переопределить .ui-panel-titlebar.ui-widget-header.ui-helper-clearfix.ui-corner-all, but I ' я не знаю, как заставить это работать.

1 Ответ

1 голос
/ 04 августа 2020

Если я правильно понял, нужно переопределить фон заголовка панели. Поскольку вы определяете собственный класс в теге p:panel, он будет применен к родительскому компоненту. В вашем css можно указать следующее:

.stockPriceHigher .ui-panel-titlebar.ui-widget-header.ui-helper-clearfix.ui-corner-all {
  background: green;
}

Это заменит предыдущий селектор

.ui-panel-titlebar.ui-widget-header.ui-helper-clearfix.ui-corner-all{
  background: #666666;
  border-radius: 0;
}
...