Vaadin网格和Grails域类

Vaadin网格和Grails域类,grails,vaadin7,vaadin-grid,Grails,Vaadin7,Vaadin Grid,晚上好。在Vaadin网格中显示Grails域对象信息时遇到问题。这就是我到目前为止所做的: contenedorClientes = new BeanItemContainer<Cliente>(Cliente.class, Grails.get(ClientesService).obtenerClientes()) gdClientes = new Grid() gdClientes.containerDataSource = contenedorClientes 我

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

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

gdClientes = new Grid()
gdClientes.containerDataSource = contenedorClientes
我需要做什么才能只显示这个类中的信息,而不显示它派生的超类中的信息

还有,有人知道如何设置网格中列的渲染顺序吗


提前感谢您的帮助。

一个一般性的好的第一次阅读是

一般的方法是这样的:首先,在设置容器后,使用
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)
    }
}
//使用`spring run--watch vaadin.groovy运行`
@葡萄([
@Grab('org.vaadin.spring:spring boot vaadin:0.0.5.RELEASE'),
@Grab('com.vaadin:vaadin服务器:7.5.10'),
@Grab('com.vaadin:vaadin客户端编译:7.5.10'),
@Grab('com.vaadin:vaadin主题:7.5.10'),
])
导入org.vaadin.spring.annotation.VaadinUI
导入com.vaadin.server.vaadin请求
导入com.vaadin.ui*
导入com.vaadin.annotations*
导入com.vaadin.data.util*
导入java.time*
类客户端{
字符串uuid
字符串名
本地日期
}
@瓦迪尼
@主题(“valo”)
类MyUI扩展了UI{
受保护的void init(VaadinRequest请求){
def clientList=(1..10)。收集{
新客户端(uuid:uuid.randomUUID(),名称:“Client#$it”,日期:LocalDate.now().plusDays(-it))
}
def container=新BeanItemContainer(客户端,客户端列表)
def网格=新网格(容器)
网格{
设置大小()
//配置列
removeAllColumns()
[名称:“客户名称”,日期:“开始日期”]
def col=添加列(k)
col.setHeaderCaption(五)
}
}
设置内容(网格)
}
}

您想在添加项目之前从容器中删除未使用的列

                    List<Cliente> itemsList = Cliente.listOrderById()

BeanItemContainer<Cliente> container = new BeanItemContainer<Cliente>(Cliente.class, Grails.get(ClientesService).obtenerClientes()) 
            //remove useless columns that cause problems
            def removed = ["id","errors","attached","dirty","dirtyPropertyNames","properties","metaClass","version","token"]  //you get the idea
            removed.each {container.removeContainerProperty(it)}
            // then considering that you have removed everything you want, finally add your items ot the container
            container.addAll(itemsList)
List itemsList=Cliente.listOrderById()
BeanItemContainer=new BeanItemContainer(Cliente.class,Grails.get(clienteService.obtenerClientes())
//删除导致问题的无用列
def removed=[“id”、“errors”、“attached”、“dirty”、“dirtyPropertyNames”、“properties”、“元类”、“version”、“token”]//你明白了吗
removed.each{container.removeContainerProperty(it)}
//然后考虑到你已经移除了所有你想要的东西,最后把你的物品添加到容器中
container.addAll(itemsList)

我通过使用addColumns方法解决了这个问题,并指定了我想要显示的列。不需要删除列

                    List<Cliente> itemsList = Cliente.listOrderById()

BeanItemContainer<Cliente> container = new BeanItemContainer<Cliente>(Cliente.class, Grails.get(ClientesService).obtenerClientes()) 
            //remove useless columns that cause problems
            def removed = ["id","errors","attached","dirty","dirtyPropertyNames","properties","metaClass","version","token"]  //you get the idea
            removed.each {container.removeContainerProperty(it)}
            // then considering that you have removed everything you want, finally add your items ot the container
            container.addAll(itemsList)