I’m new to Vaadin, and trying out Vaadin 10 to see if it’s a fit for our company. I have used the Base Starter for Vaadin Flow and am trying to simply display a list of Contacts from our database (Just JDBC, no JPA)
This works:
MainView.java
@HtmlImport("styles/shared-styles.html")
@Route("")
@PageTitle("q-contact")
public class MainView extends VerticalLayout
{
public MainView()
{
try
{
String sQuery = "SELECT * FROM t_contact where firstname != '' and lastname != '' and city != '' LIMIT 10";
List<Contact> contactList = DbAccess.getContactList(sQuery);
Grid<Contact> contactGrid = new Grid<Contact>();
contactGrid.setItems(contactList);
contactGrid.addColumn(Contact::getFirstName).setComparator((contact1, contact2) -> contact1.getFirstName()
.compareToIgnoreCase(contact2.getFirstName())).setHeader("First Name").setSortable(true);
contactGrid.addColumn(Contact::getLastName).setHeader("Last Name").setSortable(true);
HorizontalLayout main = new HorizontalLayout(contactGrid);
main.setAlignItems(Alignment.START);
main.setSizeFull();
this.setHeight("100%");
this.setWidth("100%");
this.add(main);
setClassName("main-layout");
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
The list displays as expected.
This does not work:
MainView.java
@HtmlImport("styles/shared-styles.html")
@Route("")
@PageTitle("q-contact")
public class MainView extends VerticalLayout
{
public MainView()
{
try
{
ContactList contactList = new ContactList();
HorizontalLayout main = new HorizontalLayout(contactList);
main.setAlignItems(Alignment.START);
main.setSizeFull();
this.setHeight("100%");
this.setWidth("100%");
this.add(main);
setClassName("main-layout");
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
ContactList.java
@Tag("contact-list")
@HtmlImport("contact-list.html")
public class ContactList extends PolymerTemplate<ContactList.ContactListModel> {
@Id("contactGrid")
private Grid<Contact> contactGrid;
public interface ContactListModel extends TemplateModel {
}
public ContactList()
{
try
{
String sQuery = "SELECT * FROM t_contact where firstname != '' and lastname != '' and city != '' LIMIT 10";
List<Contact> contactList = DbAccess.getContactList(sQuery);
contactGrid.setItems(contactList);
contactGrid.addColumn(Contact::getFirstName).setComparator((contact1, contact2) -> contact1.getFirstName()
.compareToIgnoreCase(contact2.getFirstName())).setHeader("First Name").setSortable(true);
contactGrid.addColumn(Contact::getLastName).setHeader("Last Name").setSortable(true);
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
contact-list.html
<link rel="import" href="../bower_components/polymer/polymer.html">
<link rel="import" href="../bower_components/vaadin-grid/src/vaadin-grid.html">
<link rel="import" href="../bower_components/vaadin-ordered-layout/src/vaadin-horizontal-layout.html">
<dom-module id="contact-list">
<template>
<vaadin-grid items="[[items]
]" id="contactGrid"></vaadin-grid>
</template>
<script>
class ContactList extends Polymer.Element {
static get is() {
return 'contact-list';
}
}
customElements.define(ContactList.is, ContactList);
</script>
</dom-module>
The list does not display. There is a vertical line on the left side of the browser screen. Inspecting the html source for both the working and non-working screens in the browser (Chrome) indicates very similar markup.
The non-working screen has this markup:
<contact-list>
#shadow-root (open)
<vaadin-grid id="contactGrid" overflow="right" style="touch-action: none;">
<vaadin-grid-column>
<template> </template>
<template class="header">
<vaadin-grid-sorter path="col0">First Name</vaadin-grid-sorter>
</template>
</vaadin-grid-column>
<vaadin-grid-column>
<template> </template>
<template class="header">
<vaadin-grid-sorter path="col1">Last Name</vaadin-grid-sorter>
</template>
</vaadin-grid-column>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-0">
<vaadin-grid-sorter path="col0">First Name</vaadin-grid-sorter>
</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-1">
<vaadin-grid-sorter path="col1">Last Name</vaadin-grid-sorter>
</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-2"/>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-3"/>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-4"> </vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-5"> </vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-6"> </vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-7"> </vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-8">first</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-9">last</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-10">kim</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-11">Stewart</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-12">Jane</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-13">Kididlehoffer</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-14">SANDY</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-15">THOMAS</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-16">Alan</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-17">Johnson</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-18">ALLAN</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-19">SMITH</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-20">P.D.</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-21">Lion</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-22">Jesse</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-23">Winter</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-24">freeda</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-25">jethro</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-26">BRUCE D.</vaadin-grid-cell-content>
<vaadin-grid-cell-content slot="vaadin-grid-cell-content-27">ROBERTS</vaadin-grid-cell-content>
</vaadin-grid>
</contact-list>
The working example has almost the same markup, only it doesn’t have the and #shadow-root (open)
From what I see, the only difference is putting the vaadin-grid in my contact-list component. I can not spot the problem. Anyone have any ideas? Thanks.