Important Notice - Forums is archived
To simplify things and help our users to be more productive, we have archived the current forum and focus our efforts on helping developers on Stack Overflow. You can post new questions on Stack Overflow or join our Discord channel.

TUTORIALVaadin lets you build secure, UX-first PWAs entirely in Java.
Vaadin lets you build secure, UX-first PWAs entirely in Java.
Free ebook & tutorial.
Calling javascript synchronously by Enver Haase, 4 weeks ago
NPE during attach in editable TreeTable
Hello,
I navigate through different views. One of them contains editable TreeTable (see screenshot):
serviceList = new TreeTable("Menage services for roles:");
serviceList.setTableFieldFactory(new DefaultFieldFactory(){
@Override
public Field<?> createField(Container container, final Object itemId,
final Object propertyId, Component uiContext) {
CheckBox field = new CheckBox(Objects.toString(itemId));
field.addValueChangeListener(event -> {
if (itemId instanceof ServiceDescriptor){
ServiceDescriptor service = (ServiceDescriptor) itemId;
if (field.getValue() != null && field.getValue()) {
field.addStyleName("blue");
}else{
field.removeStyleName("blue");
}
}else{//itemId instanceof ServiceGroup
for (Object service : serviceList.getContainerDataSource().getChildren(itemId)) {
serviceList.getContainerProperty(service, propertyId).setValue(event.getProperty().getValue());
}
}
});
field.addValueChangeListener(event -> {
if (systemChange){
return;
}
//some other staff
});
return field;
}
});
serviceList.addValueChangeListener(event -> {
Collection<?> value = (Collection<?>) event.getProperty().getValue();
for (Object itemId : serviceList.getItemIds()) {
if (itemId instanceof ServiceDescriptor) {
serviceList.getContainerProperty(itemId, "service").setValue(CollectionUtils.find(value, object -> {
return ((ServiceDescriptor) object).getKodSlu() == ((ServiceDescriptor) itemId).getKodSlu();
}) != null);
}
}
});
serviceList.setSizeFull();
Loading items to the tree table:
UI.getCurrent().access(() -> {
HierarchicalContainer services = (HierarchicalContainer) serviceList.getContainerDataSource();
synchronized (systemChange) {
try {
systemChange = true;
services.removeAllItems();
for (ServiceDescriptor service : loadData()) {
ServiceGroup group = service.getServiceGroup();
if (!services.containsId(group)) {
services.addItem(group);
serviceList.setCollapsed(group, false);
}
services.addItem(service);
services.setChildrenAllowed(service, false);
services.setParent(service, group);
}
} catch (Exception e1) {
error(e1);
showDBError(e1);
} finally {
systemChange = false;
}
}
});
And changing value (roleList is a table on the left on th screenshot):
roleList.addValueChangeListener(event -> {
if (event.getProperty().getValue() == null
|| statements.getStatement(Role_Statements.SELECT_SERVICE_BY_ROLE) == null) {
return;
}
try {
statements.getStatement(Role_Statements.SELECT_SERVICE_BY_ROLE).setValue(RoleFields.ROLE,
((EnumValueDescriptor) event.getProperty().getValue()).getValue());
ResultSet data = statements.getStatement(Role_Statements.SELECT_SERVICE_BY_ROLE).executeQuery();
Collection<ServiceDescriptor> result = new ArrayList<>();
while (data.next()) {
ServiceDescriptor service = FPSL_Statements.createServiceFromResultSet(data);
result.add(service);
}
synchronized (systemChange) {
systemChange = true;
serviceList.setValue(result);
systemChange = false;
}
} catch (Exception e) {
error(e);
showDBError(e);
};
});
Sometimes during navigation between views I get following exception:
com.vaadin.data.Buffered$SourceException
at com.vaadin.ui.AbstractField.updateValueFromDataSource(AbstractField.java:1649)
at com.vaadin.ui.AbstractField.attach(AbstractField.java:1374)
at com.vaadin.server.AbstractClientConnector.attach(AbstractClientConnector.java:590)
at com.vaadin.ui.AbstractComponent.attach(AbstractComponent.java:621)
at com.vaadin.ui.AbstractField.attach(AbstractField.java:1367)
at com.vaadin.ui.AbstractSelect.attach(AbstractSelect.java:1872)
at com.vaadin.ui.Table.attach(Table.java:4248)
at com.vaadin.server.AbstractClientConnector.attach(AbstractClientConnector.java:590)
at com.vaadin.ui.AbstractComponent.attach(AbstractComponent.java:621)
at com.vaadin.server.AbstractClientConnector.attach(AbstractClientConnector.java:590)
at com.vaadin.ui.AbstractComponent.attach(AbstractComponent.java:621)
at com.vaadin.server.AbstractClientConnector.attach(AbstractClientConnector.java:590)
at com.vaadin.ui.AbstractComponent.attach(AbstractComponent.java:621)
[b]at cz.pse.services.RolesView.attach(RolesView.java:99)
at com.vaadin.ui.AbstractComponent.setParent(AbstractComponent.java:528)
at com.vaadin.ui.AbstractSingleComponentContainer.setContent(AbstractSingleComponentContainer.java:149)
at com.vaadin.ui.UI.setContent(UI.java:1276)
at com.vaadin.navigator.Navigator$SingleComponentContainerViewDisplay.showView(Navigator.java:224)
at com.vaadin.navigator.Navigator.navigateTo(Navigator.java:575)
at com.vaadin.navigator.Navigator.navigateTo(Navigator.java:527)
at cz.pse.services.ServicesView$7.menuSelected(ServicesView.java:457)[/b]
at com.vaadin.ui.MenuBar.changeVariables(MenuBar.java:191)
at com.vaadin.server.communication.ServerRpcHandler.changeVariables(ServerRpcHandler.java:486)
at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:305)
at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:184)
at com.vaadin.server.communication.PushHandler$3.run(PushHandler.java:182)
at com.vaadin.server.communication.PushHandler.callWithUi(PushHandler.java:261)
at com.vaadin.server.communication.PushHandler.access$200(PushHandler.java:58)
at com.vaadin.server.communication.PushHandler$1.onRequest(PushHandler.java:78)
at org.atmosphere.cpr.AsynchronousProcessor.action(AsynchronousProcessor.java:205)
at org.atmosphere.cpr.AsynchronousProcessor.suspended(AsynchronousProcessor.java:104)
at org.atmosphere.container.TomcatWebSocketUtil.doService(TomcatWebSocketUtil.java:154)
at org.atmosphere.container.Tomcat7Servlet30SupportWithWebSocket.service(Tomcat7Servlet30SupportWithWebSocket.java:62)
at org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:2075)
at org.atmosphere.websocket.DefaultWebSocketProcessor.dispatch(DefaultWebSocketProcessor.java:570)
at org.atmosphere.websocket.DefaultWebSocketProcessor$3.run(DefaultWebSocketProcessor.java:332)
at org.atmosphere.util.VoidExecutorService.execute(VoidExecutorService.java:101)
at org.atmosphere.websocket.DefaultWebSocketProcessor.dispatch(DefaultWebSocketProcessor.java:327)
at org.atmosphere.websocket.DefaultWebSocketProcessor.invokeWebSocketProtocol(DefaultWebSocketProcessor.java:424)
at org.atmosphere.websocket.DefaultWebSocketProcessor.dispatchReader(DefaultWebSocketProcessor.java:794)
at org.atmosphere.websocket.DefaultWebSocketProcessor.invokeWebSocketProtocol(DefaultWebSocketProcessor.java:526)
at org.atmosphere.container.TomcatWebSocketHandler.onTextData(TomcatWebSocketHandler.java:104)
at org.apache.catalina.websocket.StreamInbound.doOnTextData(StreamInbound.java:187)
at org.apache.catalina.websocket.StreamInbound.onData(StreamInbound.java:135)
at org.apache.coyote.http11.upgrade.UpgradeProcessor.upgradeDispatch(UpgradeProcessor.java:83)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:587)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
at com.vaadin.data.util.IndexedContainer$IndexedContainerProperty.getValue(IndexedContainer.java:901)
at com.vaadin.ui.AbstractField.getDataSourceValue(AbstractField.java:305)
at com.vaadin.ui.AbstractField.updateValueFromDataSource(AbstractField.java:1639)
... 49 more
Does anybody have an idea why the excepion is araised and how to fix it?
My vaadin version is 7.4.8.
Last updated on
You cannot reply to this thread.