上下文
我正在处理一个非常旧的系统,它正在崩溃,我的实际任务是修复它
这个旧系统使用了我无法真正修改的旧库,因为它可能会修复系统的一小部分,但只会使系统的其余部分更加崩溃。不过,我可能可以添加新的库,这些库不会干扰旧的库。
我的问题
我想做的是根据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>
9件事。。。最后一个是你的答案
- 这个问题似乎与"稳定"一个几乎崩溃但有所改进的应用程序无关
- JSF(在您的案例中是Mojarra)2.2.4并不是旧的
- 看起来您使用的不是
jsp
,而是facelets - 您无法在带有
main
方法和没有附加库的类的普通java-se-sdk中复制,因此问题上的java标记是不正确的 - 没有几个库叫做JSF,有一个api叫做JSF,它由两个实现实现。Mojarra和MyFaces都实现了相同的api
- 你在哪里看到
h:datatable
上的rowStyleClass
https://docs.oracle.com/javaee/7/javaserver-faces-2-2/vdldocs-facelets/h/dataTable.html - 如果在编译时收到弃用警告,通常意味着您确实使用了一些较新版本的库(不太旧的库),但您仍然使用以前版本的旧方法
- 答案是在JSF中动态更改h:datatable单元格的颜色或样式,或者用更多的代码有条件地为h:datatablecells设置类值
- 这是您的库版本的答案。如果你不想使用这个,也不想在列(而不是ON列)中"重复"代码,你可以创建一个小的复合组件