Error when using UI navigate

Hi,

I am using UI.getCurrent().navigate(SomeTarget.class), but got into the errors as follows:

java.lang.IllegalArgumentException: Not in the list
	at com.vaadin.flow.dom.impl.AbstractNodeStateProvider.removeChild(AbstractNodeStateProvider.java:123) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.dom.Node.removeChild(Node.java:332) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.dom.Element.removeFromParent(Element.java:577) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.data.provider.AbstractComponentDataGenerator.lambda$destroyAllData$0(AbstractComponentDataGenerator.java:68) ~[flow-data-2.0.14.jar:2.0.14]

	at java.util.HashMap$Values.forEach(HashMap.java:981) ~[?:1.8.0_221]

	at com.vaadin.flow.data.provider.AbstractComponentDataGenerator.destroyAllData(AbstractComponentDataGenerator.java:67) ~[flow-data-2.0.14.jar:2.0.14]

	at java.lang.Iterable.forEach(Iterable.java:75) ~[?:1.8.0_221]

	at com.vaadin.flow.data.provider.CompositeDataGenerator.destroyAllData(CompositeDataGenerator.java:57) ~[flow-data-2.0.14.jar:2.0.14]

	at com.vaadin.flow.data.provider.DataCommunicator.handleDetach(DataCommunicator.java:407) ~[flow-data-2.0.14.jar:2.0.14]

	at java.util.ArrayList.forEach(ArrayList.java:1257) ~[?:1.8.0_221]

	at com.vaadin.flow.internal.StateNode.fireDetachListeners(StateNode.java:790) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.internal.StateNode.onDetach(StateNode.java:333) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.internal.StateNode.setParent(StateNode.java:272) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.internal.nodefeature.NodeFeature.detatchPotentialChild(NodeFeature.java:95) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.internal.nodefeature.StateNodeNodeList.remove(StateNodeNodeList.java:65) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.internal.nodefeature.ElementChildrenList.remove(ElementChildrenList.java:52) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.dom.impl.AbstractNodeStateProvider.removeChild(AbstractNodeStateProvider.java:125) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.dom.Node.removeChild(Node.java:332) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.dom.Element.removeFromParent(Element.java:577) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.router.RouterLayout.removeRouterLayoutContent(RouterLayout.java:67) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.component.internal.UIInternals.showRouteTarget(UIInternals.java:698) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.handle(AbstractNavigationStateRenderer.java:240) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.router.Router.handleNavigation(Router.java:223) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.router.Router.navigate(Router.java:194) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.component.UI.navigate(UI.java:894) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.component.UI.navigate(UI.java:857) ~[flow-server-2.0.14.jar:2.0.14]

	at com.vaadin.flow.component.UI.navigate(UI.java:812) ~[flow-server-2.0.14.jar:2.0.14]

Please kindly advise where went wrong.

Best regards,
Joey

Hi, it’s hard to say without the code what’s wrong here.
Please provide the localized code of your project.

Here are original code fragments of different classes:

@JsModule ( "./src/views/view-template.js" )
@Tag ( "view-template" )
public abstract class BaseView extends PolymerTemplate< TemplateModel > {
.....
}

@Route ( value = "caselist", layout = GenericLayout.class )
public class CaseListView extends BaseView {
	public ADRCaseListView () {
		.....
		grid.addComponentColumn( case -> {
			Button editBtn = new Button(new Image( "Edit", "./images/png/Edit.png" );
			editBtn.addClickListener( event -> {
				UI.getCurrent().navigate( "casemaint?mode=Edit&caseid=" + case.get( "caseid" ) );
			} );
			return editBtn;
		} ).setAutoWidth( true );
		.....
	}
}

@Route ( value = "casemaint", layout = GenericLayout.class )
public class CaseMaintView extends BaseView {
.....
}

However, if I changed the codes to:

			Anchor editBtn = new Anchor( "casemaint?mode=Edit&caseid=" + case.get( "caseid" ) );
			editBtn.add( new Image( "./images/png/Edit.png" , "Edit" ) );
			return editBtn;

Then it went well. Please kindly advise where went wrong.

Best regards,
Joey

Sorry, I don’t see in your code UI.getCurrent().navigate(SomeTarget.class) line anywhere.

I guess it should be

editBtn.addClickListener( event -> {
				UI.getCurrent().navigate(CaseMaintView.class);
			} );

In the first code snippet…

If so then it looks like a bug.
Could you please create a ticket with the steps to reproduce ?
I would suggest to use https://github.com/vaadin/skeleton-starter-flow project to make these steps.