h:datatable 中每一行的动态颜色
Dynamic color on every row in h:datatable
上下文
我正在处理一个非常旧的系统,它实际上正在崩溃,我的实际任务是修复它。
这个旧系统使用了我无法真正修改的旧库,因为它可能会修复系统的一小部分,但只会使其余部分更加损坏。不过,我可能可以添加不会干扰旧库的新库。
我的问题
我想做的是根据 rowStyleClass="#{searchTask.hasLinkedDecision(task) ? 'info' : ''}"
这样的服务器端条件在 table 的某些行上添加 class 但我找不到任何解决方案,因为显然有几个名为 JSF 的库,但其中 none 是相同的,而我的系统所依赖的库似乎是唯一不支持动态行样式 classes 的库。
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>
9 件事...最后一件就是您的答案
- 这个问题似乎与'stabelizing'一个几乎崩溃但有所改进的应用程序无关。
- JSF(在你的情况下是 Mojarra)2.2.4 不是 那么旧。
- 看起来您使用的不是
jsp
,而是 facelets
- 您无法使用 class 和
main
方法在普通 java-se sdk 中复制,并且没有其他库,因此问题上的 java 标签不是正确的。
- 没有几个叫做JSF的库,有一个api叫做JSF,它是由两个实现实现的。 Mojarra 和 MyFaces,都实现了相同的 api.
- 你在
h:datatable
https://docs.oracle.com/javaee/7/javaserver-faces-2-2/vdldocs-facelets/h/dataTable.html 上哪里看到rowStyleClass
- 如果你在编译时收到弃用警告,这通常意味着你确实使用了一些较新版本的库(较少的旧版本),但你仍在使用以前版本的旧方法。
- 答案在Changing h:datatable cell color or style dynamically in JSF or with a little more code conditionally set class values for h:datatable cells
- 这是适合您的库版本的答案。如果您不想使用它并且不想 'duplicate' 在列中编码(而不是在列中),您可以创建一个小型复合组件
上下文
我正在处理一个非常旧的系统,它实际上正在崩溃,我的实际任务是修复它。
这个旧系统使用了我无法真正修改的旧库,因为它可能会修复系统的一小部分,但只会使其余部分更加损坏。不过,我可能可以添加不会干扰旧库的新库。
我的问题
我想做的是根据 rowStyleClass="#{searchTask.hasLinkedDecision(task) ? 'info' : ''}"
这样的服务器端条件在 table 的某些行上添加 class 但我找不到任何解决方案,因为显然有几个名为 JSF 的库,但其中 none 是相同的,而我的系统所依赖的库似乎是唯一不支持动态行样式 classes 的库。
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>
9 件事...最后一件就是您的答案
- 这个问题似乎与'stabelizing'一个几乎崩溃但有所改进的应用程序无关。
- JSF(在你的情况下是 Mojarra)2.2.4 不是 那么旧。
- 看起来您使用的不是
jsp
,而是 facelets - 您无法使用 class 和
main
方法在普通 java-se sdk 中复制,并且没有其他库,因此问题上的 java 标签不是正确的。 - 没有几个叫做JSF的库,有一个api叫做JSF,它是由两个实现实现的。 Mojarra 和 MyFaces,都实现了相同的 api.
- 你在
h:datatable
https://docs.oracle.com/javaee/7/javaserver-faces-2-2/vdldocs-facelets/h/dataTable.html 上哪里看到 - 如果你在编译时收到弃用警告,这通常意味着你确实使用了一些较新版本的库(较少的旧版本),但你仍在使用以前版本的旧方法。
- 答案在Changing h:datatable cell color or style dynamically in JSF or with a little more code conditionally set class values for h:datatable cells
- 这是适合您的库版本的答案。如果您不想使用它并且不想 'duplicate' 在列中编码(而不是在列中),您可以创建一个小型复合组件
rowStyleClass