【问题标题】:Dynamic color on every row in h:datatableh:datatable 中每一行的动态颜色
【发布时间】:2019-01-23 00:18:22
【问题描述】:

上下文

我正在开发一个非常旧的系统,该系统实际上已经分崩离析,而我的实际任务是修复它。

这个旧系统使用了我无法真正修改的旧库,因为它可能会修复系统的一小部分,但它只会使其余部分更加损坏。不过,我可能可以添加不会干扰旧库的新库。

我的问题

我想做的是根据rowStyleClass="#{searchTask.hasLinkedDecision(task) ? 'info' : ''}" 之类的服务器端条件在表的某些行上添加一个类,但我找不到任何解决方案,因为显然有几个名为 JSF 的库但没有其中是相同的,我的系统所依赖的似乎是唯一不支持动态行样式类的。

JSF 依赖项

<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>2.2.4</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-impl</artifactId>
    <version>2.2.4</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>

有问题的代码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
.....
<h:dataTable id="dttask"
             binding="#{searchTask.taskTable.dataTable}"
             value="#{searchTask.taskTable.dataList}" var="task"
             styleClass="table table-striped table-hover">
         <!--rowStyleClass="#{searchTask.hasLinkedDecision(task) ? 'info' : ''}"-->

    <h:column>
        <f:facet name="header">
            <h:panelGroup>
                .....
            </h:panelGroup>
        </f:facet>
        <a href="${facesContext.externalContext.requestContextPath}/faces/pages/tasks/editing/add-tasks.xhtml?id=#{task.noTask}">
            <h:outputText value="#{task.noTask}"/>
        </a>
    </h:column>

    <h:column sortBy="">
        <f:facet name="header">
            <h:panelGroup>
                <h:outputText value="No CT"/>
            </h:panelGroup>
        </f:facet>

        <h:panelGroup rendered="#{not empty searchTask.getNoCT(task)}">
            <div class="tooltipobjet" tabindex="0"
                 style="border-bottom: 1px dotted black;">
                .....
            </div>
        </h:panelGroup>
    </h:column>

    <h:column>
        <f:facet name="header">
            <h:panelGroup>
                <h:commandLink actionListener="#{searchTask.sortDataListTask}">
                    .....
                </h:commandLink>
            </h:panelGroup>
        </f:facet>
        <abbr title="#{searchTask.getTaskLabel(task.principal)}">
            .....
        </abbr>
    </h:column>
    <h:column>
        <f:facet name="header">
            <h:panelGroup>
                <h:commandLink actionListener="#{searchTask.sortDataListTask}">
                    .....
                </h:commandLink>
            </h:panelGroup>
        </f:facet>
        <h:outputText value="#{searchTask.getLabelValueDomainSearch('domain.type.task', task.type)}"/>
    </h:column>
    <h:column>
        <f:facet name="header">
            <h:panelGroup>
                <h:commandLink actionListener="#{searchTask.sortDataListTask}">
                    .....
                </h:commandLink>
            </h:panelGroup>
        </f:facet>
        <div class="tooltipobject" tabindex="0"
             style="border-bottom: 1px dotted black;">
            .....
        </div>
    </h:column>
    <h:column>
        <f:facet name="header">
            <h:panelGroup>
                <h:commandLink actionListener="#{searchTask.sortDataListTask}">
                    .....
                </h:commandLink>
            </h:panelGroup>
        </f:facet>
        <h:outputText value="#{task.dateConform}">
            <f:convertDateTime pattern="#{constants.DATE_TIME_FORMAT_CREATE_JOUR_HH_MM}"/>
        </h:outputText>
    </h:column>
    <h:column>
        <f:facet name="header">
            <h:panelGroup>
                <h:commandLink
                        actionListener="#{searchTask.sortDataListTask}">
                    .....
                </h:commandLink>
            </h:panelGroup>
        </f:facet>
        <h:outputText value="#{searchTask.getAdminUnitAbbr(task.treatingAdminUnit)}"/>
    </h:column>
    <h:column>
        <f:facet name="header">
            <h:panelGroup>
                <h:commandLink actionListener="#{searchTask.sortDataListTask}">
                    .....
                </h:commandLink>
            </h:panelGroup>
        </f:facet>
        <h:outputText value="#{searchTask.getLabelValueDomainStatusByUser(task.status, task.statusEditDate)}"/>
    </h:column>
</h:dataTable>
.....
</html>

【问题讨论】:

    标签: jsf xhtml mojarra


    【解决方案1】:

    9 件事......但最后一个就是你的答案

    1. 这个问题似乎与“稳定”一个几乎崩溃的应用程序无关,而是一种改进。
    2. JSF(在您的情况下为 Mojarra)2.2.4 并没有那么旧。
    3. 看起来您使用的不是jsp,而是facelets
    4. 您不能在普通的 java-se sdk 中复制带有 main 方法的类且没有其他库,因此问题上的 java 标记不正确。
    5. 没有几个库称为 JSF,有一个称为 JSF 的 api 由两个实现实现。 Mojarra 和 MyFaces,都实现了相同的 api。
    6. 你在哪里看到rowStyleClassh:datatablehttps://docs.oracle.com/javaee/7/javaserver-faces-2-2/vdldocs-facelets/h/dataTable.html
    7. 如果您在编译时收到弃用警告,这通常意味着您确实使用了一些较新版本的库(较旧的库),但您仍然使用以前版本的旧方法。
    8. 答案在Changing h:datatable cell color or style dynamically in JSF 或更多代码conditionally set class values for h:datatable cells
    9. 这是您的库版本的答案。如果您不想使用它并且不想在列(而不是列)“复制”代码,您可以创建一个小型复合组件

    【讨论】:

    • 感谢您的帮助,但我不明白第四点,我想知道是否有任何替代方法,因此我不必在每一列上复制粘贴 styleClass 条件?顺便说一句,当我说 旧库 时,我没有必要谈论 JSF/Mojarra,但是当您编译时,大多数控制台输出都会警告使用不推荐使用的方法.....
    • 非常感谢!非常感谢您的帮助!第 9 点正是我想知道的,我更多地抱怨图书馆太旧以至于它们甚至不再存在。不过,无论如何,我不应该抱怨这里的任何事情。如果我很难理解或者我的英语不完美,请原谅。我是法裔加拿大人,所以...再次感谢
    猜你喜欢
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 2021-05-20
    • 2014-04-09
    • 2017-03-09
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多