2015-10-10 3 views
2

Прежде всего, у меня есть простой пользовательский интерфейс, который имеет метод addMenueItem(). Этот метод получает представление-идентификатор и добавляет кнопку к Menue и говорит штурману от Vaadin, чтобы перейти к нему по щелчку:Spring (-Boot) & Vaadin - Установить вид по умолчанию в навигаторе Vaadin

......... 
    @PostConstruct 
    private void initPage() { 
     navigator.addProvider(viewProvider); 
     contentLayout.setSizeFull(); 
    } 

    protected void addMenuItem(final String viewId) { 
     final String postfix; 
     if (viewId == null || viewId.trim().isEmpty()) { 
      postfix = ""; 
     } else { 
      postfix = "." + viewId; 
     } 
     final String name = messageByLocaleService.getMessage(I18N_PREFIX + postfix); 
     menue.addItem(name, menueCommand -> getUI().getNavigator().navigateTo(viewId)); 
    } 
......... 

Так я добавляю некоторые виды из моих MainUI как:

addMenuItem(DefaultView.VIEW_ID); 

Средство распознавания разрешений Spring, основанного на URL, вызывает теперь идентификатор из значения 'DefaultView.VIEW_ID'. Теперь я ищу хорошее решение для сопоставления данного идентификатора вида не только с «/ VIEW-ID», но также с корневым путем приложения -> «/».

Как сообщить Spring, что этот специальный ViewID также является корнем или синонимом для/VIEW-ID?

Наверняка есть возможность жестко закодировать это в каком-то xml-файле Tomcat или что-то в этом роде, но я бы хотел сделать это динамически.

Заранее спасибо

PS: Я очень новой для весны и такого рода вещи, любезно пожалуйста: D

+0

Вкратце '' '' (пустая строка) соответствует представлению по умолчанию, так как при доступе к корневому пути нет фрагмента URI. Вы можете больше узнать о навигаторе в [vaadin book] (https://vaadin.com/book/-/page/advanced.navigator.html) и [в waadin wiki] (https://vaadin.com/ вики? p_p_id = 36 & p_p_lifecycle = 0 & p_p_state = нормально & p_p_mode = вид & p_p_col_id = строка-1 & p_p_col_pos = 1 & p_p_col_count = 3 & _36_struts_action =% 2Fwiki% 2Fview & p_r_p_185834411_nodeName = vaadin.com + вики & p_r_p_185834411_title = Vaadin + весна) вы можете найти учебник по Vaadin и пружинной загрузки. – Morfic

ответ

3

Навигатор и фрагмент URI идут рука об руку. Корневой путь не имеет никакого URI-фрагмента, поэтому навигатор не знает, куда перемещаться при вызове URL-адреса.

Вы можете решить эту проблему в своем классе UI, как это:

@SpringUI 
public class MainUI extends UI { 
    @Autowired 
    SpringViewProvider viewProvider; 

    @Override 
    protected void init(VaadinRequest request){ 
     Navigator navigator = new Navigator(this,this); 
     navigator.addProvider(viewProvider); 
     this.setNavigator(navigator); 

     // Set default view 
     NavigationStateManager stateManager = new Navigator.UriFragmentManager(getPage()); 
     stateManager.setState(DefaultView.VIEW_ID); 
    } 
} 

Объяснение:

Большинство вещей должно быть хорошо известно уже потому, что эти основы, которые могут быть прочитаны в нескольких учебные пособия, например: III Views and Navigation with Vaadin Spring

Короче:

  • Вы используете @SpringUI аннотацию, которая по умолчанию карты до /, чтобы зарегистрировать новый пользовательский интерфейс
  • Вы autowire в SpringViewProvider, который автоматически регистрирует ваши взгляды.
  • Вы инициализируете навигатор.

Чтобы установить вид по умолчанию вы просто инициализировать NavigationStateManager, который устанавливает фрагмент URI. Как только метод init завершает класс UI вызывает метод Navigator.navigateTo() с текущим состоянием навигационного навигатора .

ПРИМЕЧАНИЕ: Вы могли бы найти что-то в сети, как:

navigator.navigateTo(DefaultView.VIEW_ID); 

Если вы используете это в методе инициализации пользовательского интерфейса ваш навигатор называется дважды.

+0

В Vaadin Spring 1.1 Конфигурация навигатора стала немного проще, может быть, нам следует обновить этот ответ? Я сделал этот пример, как перейти от инициализации стиля 1.1 к 1.1 стилю: https://github.com/mstahv/vaadin-spring-navigation-example/commit/e9bffd7b0e440541a3bc7e6948a503dcfea18523 – mstahv

+0

Это решение разбивает закладки, так как состояние навигации ** всегда ** установлен в режим по умолчанию – herman

Смежные вопросы