grails - Vaadin网格和Grails域类

标签 grails vaadin7 vaadin-grid

晚上好。我在Vaadin网格中显示Grails域对象信息时遇到问题。这是我到目前为止所拥有的:

contenedorClientes = new BeanItemContainer<Cliente>(Cliente.class, Grails.get(ClientesService).obtenerClientes())    

gdClientes = new Grid()
gdClientes.containerDataSource = contenedorClientes

基本上,我正在做的是:首先,我创建一个BeanItemContainer,然后将其配置为将容器配置为Cliente类型之一,并且还设置了此容器的数据源,在这种情况下,该数据源是一种Grails服务,该服务返回Cliente类型的对象列表。

然后,我实例化Vaadin网格并将其containerDataSource设置为之前创建的容器。

我遇到的主要问题是网格还在显示Cliente扩展自的域类的信息。这意味着还将显示诸如版本,脏污,元类之类的属性。我不希望这样,我只想显示我创建的Domain类中的数据。

这是域类:
class Cliente {

    String nombre
    String apellido
    String telefono
    String email

    static hasOne = [usuario:Usuario]

    static constraints = {
        nombre(nullable: false, blank: false)
        apellido(nullable: false, blank: false)
        telefono(nullable: false, blank: false, matches: '^\\d{3}-\\d{3}-\\d{4}$', unique: true)
        email(nullable: false, blank: false, email: true, unique: true)

    }
}

为了只显示此类中的信息,而不显示其派生的父类(super class)中的信息,我需要做什么?

此外,有人知道如何设置网格中列的呈现顺序吗?

预先感谢您的帮助。

最佳答案

好的一般读物是Grid section in the Book of Vaadin

通用方法如下:首先,在设置容器之后,删除所有带有removeAllColumns的列,然后继续添加实际的列配置。由于您控制了此步骤,因此列的顺序自然而然(如果您真的只想对所有现有的重新排序,请使用setColumnOrder)。

这是该方法的独立示例:

// run with `spring run --watch vaadin.groovy`
@Grapes([
@Grab('org.vaadin.spring:spring-boot-vaadin:0.0.5.RELEASE'),
@Grab('com.vaadin:vaadin-server:7.5.10'),
@Grab('com.vaadin:vaadin-client-compiled:7.5.10'),
@Grab('com.vaadin:vaadin-themes:7.5.10'),
])
import org.vaadin.spring.annotation.VaadinUI
import com.vaadin.server.VaadinRequest
import com.vaadin.ui.*
import com.vaadin.annotations.*
import com.vaadin.data.util.*
import java.time.*

class Client {
    String uuid
    String name
    LocalDate date
}

@VaadinUI
@Theme('valo')
class MyUI extends UI {
    protected void init(VaadinRequest request) {
        def clientList = (1..10).collect{
            new Client(uuid: UUID.randomUUID(), name: "client #$it", date: LocalDate.now().plusDays(-it))
        }
        def container = new BeanItemContainer<Client>(Client, clientList)
        def grid = new Grid(container)
        grid.with{
            setSizeFull()
            // configure the columns
            removeAllColumns()
            [name: "Client name", date: "Start date"].each{ k,v ->
                def col = addColumn(k)
                col.setHeaderCaption(v)
            }
        }
        setContent(grid)
    }
}

关于grails - Vaadin网格和Grails域类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34215540/

相关文章:

java - 如何在 Vaadin 8 中渲染网格的 LocalDateRenderer

java - Vaadin 8 Grid 不适用于太多条目

grails - 代理后面的GGTS 3.4中的设置Grails

grails - 验证域类的实例是唯一的

grails - Grails-如何使一段代码仅在功能测试期间运行

java - ID 必须存在于容器中或作为生成的列

java - Grails 2.3 无法创建 jvm 错误

vaadin - 如何增加 Vaadin 通知/警告时间?

Vaadin - 如何限制组件的柔软度和重叠?

java - 具有生成的属性和排序的 Vaadin 网格