Frame in DataGrid details

I tried to place a frame in DataGrid details but got this error:

java.lang.ClassCastException: Cannot cast com.haulmont.cuba.web.gui.components.WebFrame to com.company.app.web.visitassignment.FlatListFrame
	at java.lang.Class.cast(Class.java:3369)
	at com.haulmont.cuba.web.gui.WebComponentsFactory.createComponent(WebComponentsFactory.java:181)
	at com.company.app.web.visitassignment.VisitAssignmentForm$2.getDetails(VisitAssignmentForm.java:170)
	at com.company.app.web.visitassignment.VisitAssignmentForm$2.getDetails(VisitAssignmentForm.java:166)
...

There is my code:

    flatGrid.setDetailsGenerator(new DataGrid.DetailsGenerator<VisitAssignment>() {
        @Override
        public Component getDetails(VisitAssignment visitAssignment) {
            FlatListFrame flatListFrame = componentsFactory.createComponent(FlatListFrame.class);
            flatListFrame.setWidth("100%");
            flatListFrame.setHeight("100%");

            VBoxLayout mainLayout = componentsFactory.createComponent(VBoxLayout.class);
            mainLayout.setWidth("100%");
            mainLayout.setHeight("100%");
            mainLayout.setMargin(true);

            mainLayout.add(flatListFrame);
            mainLayout.expand(flatListFrame);

            return mainLayout;
        }
    });
    flatGrid.setItemClickAction(new BaseAction("itemClickAction") {
        @Override
        public void actionPerform(Component component) {
            flatGrid.setDetailsVisible(flatGrid.getSingleSelected(), !flatGrid.isDetailsVisible(flatGrid.getSingleSelected()));
        }
    });

How can I do it right?
CUBA Platform version 6.8.4

Hi,

You can’t create a frame using the componentsFactory.createComponent method. Instead, you have to use the openFrame method of a screen controller.

Also, I see no reasons to wrap a frame into a box, you can just return a frame as a details content, for instance:

ordersDataGrid.setDetailsGenerator(new DataGrid.DetailsGenerator<Order>() {
    @Nullable
    @Override
    public Component getDetails(Order entity) {
        ActionButtonFrame content = (ActionButtonFrame) openFrame(null, "action-button");
        content.setSizeFull();
        return content;
    }
});