2015-12-11 37 views
0

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

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

gdClientes = new Grid() 
gdClientes.containerDataSource = contenedorClientes 

基本上,我在做什么是这样的:首先,我创建一个BeanItemContainer然后我设置配置这个容器的类型为Cliente之一,我还设置了在这种情况下,这个容器的数据源是一个Grails服务的方法,它返回Cliente类型的对象列表。

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

我遇到的主要问题是网格也显示来自Cliente扩展的域类的信息。这意味着像Version,Dirty,Meta Class这样的属性也会显示出来。我不想要这个,我只想从我创建的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) 

    } 
} 

我需要什么,以显示只有在这个类的信息,而不是一个在其从中导出超类呢?

另外,有没有人知道如何设置网格中列的渲染顺序?

非常感谢您的帮助。

回答

0

我解决了这个用的方法addColumns之前从容器中取出的unnused列网格并指定我想要显示的列。无需删除列。

0

一般良好的首读是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) 
    } 
} 
0

你想加入您的项目

    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)