ViewNavigators passing parameter

I am facing a similar to this issue but @gorelov when you said “only after it” please help how to handle the following problem.

Here is by create event from list screen from where i want to pass the userType parameter which was originally passed from the menu to list screen.

@Subscribe("attendLogManualsTable.create")
    public void onAttendLogManualsTableCreate(final ActionPerformedEvent event) {
        log.info("userType List screen: "+userType);
        viewNavigators.detailView(this, AttendLogManual.class)
                .newEntity()
                .withViewClass(AttendLogManualDetailView.class)
                .withAfterNavigationHandler(e -> {
                    AttendLogManualDetailView view = e.getView();
                    view.setUserType(userType);
                })
               // .withQueryParameters(QueryParameters.of("userType", userType))
                .navigate();
    }

Here is my detail screen controller:

 protected String userType;
    public void setUserType(String uType) {
        userType = uType;
    }

@Subscribe
    public void onBeforeShow(BeforeShowEvent event) {
       

        log.info("userType detail screen: "+userType);

        if (userType!=null && userType.equalsIgnoreCase("hr")) {
            transportRouteField.setVisible(false);
            reasonCodeField.setVisible(false);
        }else if(userType!=null && userType.equalsIgnoreCase("trans")) {
            transportRouteField.setVisible(true);
            reasonCodeField.setVisible(true);
            if(getEditedEntity().getTransportRoute()!=null && getEditedEntity().getReasonCode()!=null){
                this.loadEmployeesFromTransPortRoute();
            }
        } else if(userType!=null) { //supervisor
            transportRouteField.setVisible(false);
            reasonCodeField.setVisible(false);
        }
    }

Here is log

2025-04-30T12:39:57.414-04:00  INFO 24572 --- [nio-8081-exec-2] c.i.h.v.l.a.AttendLogManualListView      : userType List screen: hr
2025-04-30T12:39:57.901-04:00  INFO 24572 --- [nio-8081-exec-7] c.i.h.v.l.a.AttendLogManualDetailView    : userType detail screen: null

I also have tried but didn’t work

.withQueryParameters(QueryParameters.of("userType", userType))

Thanks for your help fixing this issue.

Hello Mortoza!

The after navigation handler is invoked after AttendLogManualDetailView’s BeforeShowEvent. If you want to access it during the before show event, you should pass it using URL query parameters. This is very simple for create or edit actions:

@Install(to = "projectsDataGrid.createAction", subject = "queryParametersProvider")
private QueryParameters projectsDataGridCreateActionQueryParametersProvider() {
    return QueryParameters.of("userType", UserType.FIRST_TYPE.name());
}

And you don’t need to subscribe to ActionPerformedEvent. In the AttendLogManualDetailView add:

@Subscribe
public void onQueryParametersChange(final QueryParametersChangeEvent event) {
    String type = event.getQueryParameters().getSingleParameter("userType")
            .orElse(null);
   
    // convert string value to enum if not null
}

Thank you. I worked.