2015-12-11 2 views
0

Добрый вечер. У меня возникла проблема с отображением информации о объекте домена Grails в сетке Vaadin. Это то, что я до сих пор:Vaadin Grid и Grails Domain Class

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. Я не хочу этого, я просто хочу, чтобы данные из класса домена, которые я создал для отображения.

Вот класс домена:

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 из сетку и указать, какие столбцы я хотел бы показать. Нет необходимости удалять столбцы.

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

Вы хотите удалить unnused столбцы из контейнера, прежде чем добавлять свои пункты

    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) 
Смежные вопросы