2017-05-19 43 views
0

我是Java和Vaadin的新手,并在Vaadin网格中显示数据期间卡住。我有一个JSON格式的数据:在Vaadin网格中显示嵌套的JSON数据

[ 
    { 
     "id":1, 
     "name":"testSiteC", 
     "accountId":1, 
     "accountData":{ 
     "id":1, 
     "name":"testAccountA", 
     "code":"AC0001", 
     "salesStaffId":200, 
     "samplingDate":1493038800000, 
     "startDate":1493038800000, 
     "creditPeriod":15, 
     "cinNo":"testCinNo", 
     "vatRegistrationNo":"testVatRegistrationNo", 
     "panNo":"testPanNo", 
     "serviceTaxRegistrationNo":"testServiceTaxRegistrationNo", 
     "isActive":true, 
     "billingType":"testBillingType", 
     "billingBasis":"cup count basis", 
     "billingAddress":"billingAddress", 
     "consigneeAddress":"test", 
     "clientRelationshipManagerStaffId":2, 
     "opsManagerId":1, 
     "serviceTaxId":1, 
     "createdOn":1483209000000, 
     "updatedOn":1494949002000 
     }, 
     "building":"3rd floor", 
     "locality":"Koramangala", 
     "city":"Bangalore", 
     "state":"Karnataka", 
     "country":"India", 
     "peopleCount":100, 
     "staffInCharge":1, 
     "dailyStartTime":"23:34:23", 
     "dailyEndTime":"23:34:34", 
     "createdOn":1493799889000, 
     "updatedOn":1494945760000, 
     "isActive":true, 
     "opsStartDate":1493730000000 
    } 
] 

Bean来嵌套:包含嵌套豆

package com.chaipoint.boxc.common.model; 

import java.io.Serializable; 
import java.sql.Time; 
import java.sql.Timestamp; 
import java.util.Date; 

public class SiteResponse implements Serializable { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    private Long id; 
    private String name; 
    private Integer accountId; 
    private AccountResponse accountData; 
    private String building; 
    private String locality; 
    private String city; 
    private String state; 
    private String country; 
    private Integer peopleCount; 
    private Integer staffInCharge; 
    private Time dailyStartTime; 
    private Time dailyEndTime; 
    private Date createdOn; 
    private Timestamp updatedOn; 
    private Boolean isActive; 
    private Date opsStartDate; 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Integer getAccountId() { 
     return accountId; 
    } 

    public void setAccountId(Integer accountId) { 
     this.accountId = accountId; 
    } 

    public AccountResponse getAccountData() { 
     return accountData; 
    } 

    public void setAccountData(AccountResponse accountData) { 
     this.accountData = accountData; 
    } 

    public String getBuilding() { 
     return building; 
    } 

    public void setBuilding(String building) { 
     this.building = building; 
    } 

    public String getLocality() { 
     return locality; 
    } 

    public void setLocality(String locality) { 
     this.locality = locality; 
    } 

    public String getCity() { 
     return city; 
    } 

    public void setCity(String city) { 
     this.city = city; 
    } 

    public String getState() { 
     return state; 
    } 

    public void setState(String state) { 
     this.state = state; 
    } 

    public String getCountry() { 
     return country; 
    } 

    public void setCountry(String country) { 
     this.country = country; 
    } 

    public Integer getPeopleCount() { 
     return peopleCount; 
    } 

    public void setPeopleCount(Integer peopleCount) { 
     this.peopleCount = peopleCount; 
    } 

    public Integer getStaffInCharge() { 
     return staffInCharge; 
    } 

    public void setStaffInCharge(Integer staffInCharge) { 
     this.staffInCharge = staffInCharge; 
    } 

    public Time getDailyStartTime() { 
     return dailyStartTime; 
    } 

    public void setDailyStartTime(Time dailyStartTime) { 
     this.dailyStartTime = dailyStartTime; 
    } 

    public Time getDailyEndTime() { 
     return dailyEndTime; 
    } 

    public void setDailyEndTime(Time dailyEndTime) { 
     this.dailyEndTime = dailyEndTime; 
    } 

    public Date getCreatedOn() { 
     return createdOn; 
    } 

    public void setCreatedOn(Date createdOn) { 
     this.createdOn = createdOn; 
    } 

    public Timestamp getUpdatedOn() { 
     return updatedOn; 
    } 

    public void setUpdatedOn(Timestamp updatedOn) { 
     this.updatedOn = updatedOn; 
    } 

    public Boolean getIsActive() { 
     return isActive; 
    } 

    public void setIsActive(Boolean isActive) { 
     this.isActive = isActive; 
    } 

    public Date getOpsStartDate() { 
     return opsStartDate; 
    } 

    public void setOpsStartDate(Date opsStartDate) { 
     this.opsStartDate = opsStartDate; 
    } 

    public static long getSerialversionuid() { 
     return serialVersionUID; 
    } 



} 

public class SitePantryResponse implements Serializable { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    private Long id; 
    private String name; 
    private Integer siteId; 
    private SiteResponse siteData; 
    private Integer floorNo; 
    private Date createdOn; 
    private Timestamp updatedOn; 
    private Boolean isActive; 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Integer getSiteId() { 
     return siteId; 
    } 

    public void setSiteId(Integer siteId) { 
     this.siteId = siteId; 
    } 

    public SiteResponse getSiteData() { 
     return siteData; 
    } 

    public void setSiteData(SiteResponse siteData) { 
     this.siteData = siteData; 
    } 

    public Integer getFloorNo() { 
     return floorNo; 
    } 

    public void setFloorNo(Integer floorNo) { 
     this.floorNo = floorNo; 
    } 

    public Date getCreatedOn() { 
     return createdOn; 
    } 

    public void setCreatedOn(Date createdOn) { 
     this.createdOn = createdOn; 
    } 

    public Timestamp getUpdatedOn() { 
     return updatedOn; 
    } 

    public void setUpdatedOn(Timestamp updatedOn) { 
     this.updatedOn = updatedOn; 
    } 

    public Boolean getIsActive() { 
     return isActive; 
    } 

    public void setIsActive(Boolean isActive) { 
     this.isActive = isActive; 
    } 

    public static long getSerialversionuid() { 
     return serialVersionUID; 
    } 


} 

所以,虽然显示的数据到网格状table.addColumn(SitePantryResponse::getSiteData::getName).setCaption("Site Name")它抛出:

这个表达式的目标类型必须是一个功能接口错误。

回答

0

SitePantryResponse :: getSiteData ::的getName

它不可能像链方法的引用。您可以使用简单的lambda表达式来代替:

table.addColumn(r -> r.getSideDate().getName()).setCaption("Site Name") 

,或者如果你真的想用方法的引用,你可以使用一个辅助方法,它将把它们连并返回ValueProvider以后它可以传递给Grid.addColumn

<A, B, C> ValueProvider<A, C> chain(Function<A, B> f1, Function<B, C> f2) { 
    return f1.andThen(f2)::apply; 
} 

有了这个,你可以这样写:

table.addColumn(chain(SitePantryResponse::getSiteData, SiteResponse::getName)).setCaption("Site Name") 

但是,正如你所看到的,这使得代码更复杂,时间较长,因此没有理由在简单的lambda表达式上使用这种方法。

+0

lambda表达式适合我。非常感谢。 –