private BSDataTable<SInstance, ?> newTable(String id) {
ISupplier<SViewListByMasterDetail> viewSupplier = ctx.getViewSupplier(SViewListByMasterDetail.class);
final BSDataTableBuilder<SInstance, String, ?> builder = new MasterDetailBSDataTableBuilder<>(newDataProvider(viewSupplier)).withNoRecordsToolbar();
final BSDataTable<SInstance, ?> dataTable;
configureColumns(viewSupplier.get().getColumns(), builder, list, modal, ctx, ctx.getViewMode(), viewSupplier);
dataTable = builder.build(id);
dataTable.setOnNewRowItem((IConsumer<Item<SInstance>>) rowItem -> {
rowItem.setOutputMarkupId(true);
SValidationFeedbackHandler feedbackHandler = SValidationFeedbackHandler.bindTo(new FeedbackFence(rowItem))
.addInstanceModel(rowItem.getModel())
.addListener(ISValidationFeedbackHandlerListener.withTarget(t -> t.add(rowItem)));
rowItem.add($b.classAppender("singular-form-table-row can-have-error"));
rowItem.add($b.classAppender("has-errors", $m.ofValue(feedbackHandler).map(SValidationFeedbackHandler::containsNestedErrors)));
});
dataTable.setStripedRows(false);
dataTable.setHoverRows(false);
dataTable.setBorderedTable(false);
return dataTable;
}