Навигация в ваадине с параметрами - PullRequest
1 голос
/ 06 января 2020

В моем проекте у меня есть соединение с базой данных jpa, где я храню упражнения. Я прочитал все упражнения из базы данных и сохранил их в переменной allExercises . После этого я сохраняю название каждого упражнения в кнопке, добавляю их в поле для GUI, а также добавляю событие прослушивания click , которое обрабатывает переход к следующему представлению. Следующий вид представляет собой подробный вид выбранного упражнения. Чтобы узнать, на какое упражнение я нажал, я хочу передать id объекта упражнения в качестве параметра . На данный момент у меня есть следующий код:

for(Exercise exercise : allExercises) {
        // create new button with exercise title
        Button bt = new Button(exercise.getTitle());
        // add button to box
        boxExerciseTitle.add(bt);
        // add action event
        bt.addClickListener(e -> UI.getCurrent().navigate(ExerciseDetailView.class, exercise.getId()));
}

Этот код не работает. Существует проблема с идентификатором, соответственно, что функция навигации не обрабатывает эти два аргумента.

Моя цель - прочитать параметр в подробном представлении следующим образом:

public class ExerciseDetailView extends VerticalLayout implements View{
    @Override
    public void enter(ViewChangeEvent event) {
        String myPassedId = event.getParameters();
        ...
    }
}

Как я могу изменить свой код, чтобы я мог передавать идентификатор в качестве параметра в Vaadin?

1 Ответ

1 голос
/ 06 января 2020

В подробном представлении должен быть реализован HasUrlParameter, а затем вы получите параметр в методе setParameter:

@Route(value = "exercise")
public class ExerciseDetailView  extends VerticalLayout
        implements HasUrlParameter<Long> {

    @Override
    public void setParameter(BeforeEvent event,
                             Long exerciseId) {
        // find the single exercise using the given id
        // Exercise exercise = exerciseRepository.findById(exerciseId);
    }
}

Документация: https://vaadin.com/docs/v14/flow/routing/tutorial-router-url-parameters.html

Если тип exercise.getId() не Long, а вместо Integer или другого числа, измените тип HasUrlParameter соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...