【问题标题】:Style ENUM in Primefaces datatablePrimefaces 数据表中的 ENUM 样式
【发布时间】:2013-03-12 11:45:43
【问题描述】:

我正在尝试使用 dataTable 的 rowStyleClass 属性将行的颜色设置为红色。条件是比较一个枚举,所以如果 invoice.status eq InvoiceStatus.CANCELLED,那么它应该将 css 类“取消”应用于该行。我认为这可能不是比较枚举与 EL 的正确方法。你能告诉我怎么做吗?


        <p:dataTable id="invoicesTable" widgetVar="invoicesTable" 
                                        value="#{invoiceManager.invoices}"
                                        var="invoice" 
                                        filteredValue = #{invoiceManager.filteredInvoices}"
                                        paginator="true" 
                                        rows="15" 
                                        paginatorPosition="bottom"
                                        paginatorAlwaysVisible="false"
                                        emptyMessage="#{msg['warning.noData']}"
           HERE's THE PROBLEM  -->      rowStyleClass="#{invoice.status eq CANCELLED ? 'cancelled' : null}">
            <f:facet name="header">
                <h:outputText value="#{msg['title.invoices']}" />
                <p:outputPanel style="position: relative; left: 42%;">
                    <h:inputText id="globalFilter" onkeyup="invoicesTable.filter()" />
                </p:outputPanel>                
            </f:facet>

            <p:column headerText="#{msg['label.number']}" filterBy="#{invoice.number}" filterStyle="display: none;">
                <h:outputText value="#{invoice.number}" />
            </p:column>

            <p:column headerText="#{msg['label.customerName']}">
                <h:outputText value="#{invoice.customer.name}" />
            </p:column>

            <p:column headerText="#{msg['label.action']}" styleClass="actionsColumn">
                <p:commandButton process="@this" action="confirmInvoice" icon="ui-icon-search" title="#{msg['button.viewInvoice']}" >
                    <f:setPropertyActionListener target="#{invoiceManager.invoice}" value="#{invoice}" />
                </p:commandButton>
                <p:commandButton process="@this" action="#{invoiceManager.changeInvoiceStatus}" icon="ui-icon-flag" title="#{msg['button.changeInvoiceStatus']}" >
                    <f:setPropertyActionListener target="#{invoiceManager.invoice}" value="#{invoice}" />
                </p:commandButton>
            </p:column>
        </p:dataTable>

【问题讨论】:

  • 在我看来,这个问题不需要投票。我认为这个问题是公平有效的。
  • @MagnusTengdahl 通常反对它的人以前没有与 JSF 合作过(否则他们可以在反对时提供评论/答案)。
  • @SerkanArıkuşu 它不是重复的。主要问题是如何为某些行而不是整个数据表定义行样式。
  • 问题是关于在 EL 中使用枚举,也是一种最佳实践;对于使用枚举,它是重复的

标签: java jsf primefaces


【解决方案1】:

枚举在 EL 中被解释为字符串。您需要引用枚举值。

rowStyleClass="#{invoice.status eq 'CANCELLED' ? 'cancelled' : null}"

或者,您可以向枚举添加一个新方法,

public String getStyleClass() {
    return name().toLowerCase();
}

按如下方式使用

rowStyleClass="#{invoice.status.styleClass}"

【讨论】:

  • @BalsusC 也不能使用普通的 java 语法吗?例如invoice.status eq StatusEnum.Cancelled
  • @Paranaix:不。但是,您可以使用标记处理程序将枚举常量导入 EL 范围。例如。 OmniFaces &lt;o:importConstants&gt;。另见展示:showcase.omnifaces.org/taghandlers/importConstants 声明&lt;o:importConstants type="com.example.Status"/&gt; 后,您可以使用#{invoice.status eq Status.CANCELLED ? 'cancelled' : null}
  • @BalsusC 啊,对了,自从我处理 jsf 以来已经过去了一段时间 ^^ 请记住,我特别为这个用例使用了 OmnniFaces
猜你喜欢
  • 2016-11-23
  • 2013-03-14
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 2012-12-21
  • 2023-01-31
相关资源
最近更新 更多