gpt4 book ai didi

java - 将 boolean 值显示为图标时 Vaadin 网格与持久性

转载 作者:行者123 更新时间:2023-12-02 02:30:50 25 4
gpt4 key购买 nike

我有一个持久化的实体,它为 Vaadin 网格中的行提供数据。这部分有效。

我现在想将 boolean 值显示为图像。为此,我向实体添加了一个 setter/getter 。这部分仅在记录最近被持久化到数据库时才起作用,我认为这意味着 getter 被持久化,这是不希望的。对于在引入 getter 之前保留到数据库的行,由于enabledIcon 属性返回空内容,该字段在 vaadin 网格中保持空白。

我尝试通过添加 @Transient 注释来禁用此行为,但由于某种原因,eureka 客户端出现错误,并且它对空字段也没有帮助。

我正在考虑通过组合而不是继承来创建一个新的包装类,但随后我必须手动创建所有这些 getter 和 setter,这在我看来是糟糕的设计。

欢迎任何答案,即使是那些告诉我按组合使用包装类的答案。

package com.xxx.bpspkpibpcheck.model;

import javax.persistence.Entity;
//import javax.persistence.Transient;

import com.xxx.common.model.KPI;
import com.vaadin.server.ThemeResource;

@Entity
public class KPIBusiness extends KPI {

private static final String IMAGES = "images/";
private static final String IMAGE_STATUS_RED = IMAGES + "LED_red_24.png";
private static final String IMAGE_STATUS_GREEN = IMAGES + "LED_green_24.png";
private static final String IMAGE_STATUS_GRAY = IMAGES + "LED_gray_24.png";
private ThemeResource redStatus = new ThemeResource(IMAGE_STATUS_RED);
private ThemeResource greenStatus = new ThemeResource(IMAGE_STATUS_GREEN);
private ThemeResource grayStatus = new ThemeResource(IMAGE_STATUS_GRAY);

//@Transient
//ThemeResource enabledIcon = greenStatus;

//@Transient
public ThemeResource getEnabledIcon()
{
return getEnabled() != 0 ? greenStatus : grayStatus;
}
}

最佳答案

我可能在这里错过了一些重要的东西,但这是我的方法。

对我来说,问题似乎在于,在这种情况下,模型(您的实体)和 View /演示者内容已混合在您的实体类中。而且您通常不想保留与 View 相关的内容。

您应该将此图像内容从实体中分离出来,并将图像列作为生成列添加到网格中。

以此为例:How to add a generated column to Vaadin 8 Grid?

更新:提供的示例链接不是关于此处需要的组件列,因此作为示例:

添加组件列:

grid.addComponentColumn(statusProvider).setCaption("Status").setId("status");

其中 statusProvider 类似于:

ValueProvider<GridEntity, Layout> statusProvider = gridEntity -> {
AbsoluteLayout al = new AbsoluteLayout();
al.setSizeUndefined();
al.addStyleName("status");
String styleName = (gridEntity.isStatusOk()) ? "green" : "red";
al.addStyleName(styleName);
return al;
};

因此,在我的版本中,“交通灯”是通过使用 addStyleName(...) 级联 css 内容来实现的(使用默认的 mytheme.scss),但当然也可以使用 LED 图像无论是在 CSS 中还是按照您最初的计划。

.status {
width: 30px;
height: 30px;
border-radius: 15px;
margin: 0;
padding: 0;
}

.green {
background-color: green;
}

.red {
background-color: red;
}

关于java - 将 boolean 值显示为图标时 Vaadin 网格与持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47133157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com