일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- SPC
- window
- xPlatform
- mybatis
- table
- MSSQL
- react
- R
- es6
- tomcat
- Eclipse
- SSL
- IntelliJ
- Android
- 보조정렬
- Python
- Java
- NPM
- JavaScript
- vaadin
- Express
- hadoop
- SQL
- Spring
- GIT
- Sqoop
- plugin
- 공정능력
- Kotlin
- mapreduce
- Today
- Total
DBILITY
vaadin Navigator 실습 본문
vaadin에서 SPA(Single Page Application, 화면의 필요한 부분만 갱신) 방식의 페이지 이동은 com.vaadin.navigator.Navigator로 구현한다.
갱신이 필요한 부분 = Fragment = View(?)
Addview로 추가하고, navigateTo메서드로 View이동을 요청하면 viewContainer영역이 동적으로 변경된다.
navigator는 UI를 기준으로 동작한다.
SPA방식의 페이지에 좌측 메뉴+우측 콘텐츠 형태의 레이아웃을 잡고,
버튼으로 개별 메뉴 구성, 클릭시 우측 콘텐츠가 바뀌는 형태다.
우측 컨텐츠 영역은 화면의 영역 중 빈부분을 최대로 채우도록 처리한다.( layout.setExpandRatio(content, 1) )
About~UserListView는 VerticalLayout을 상속받고 View인터페이스를 구현한다.
8.2 이상을 사용한다면 UI에 @PushStateNavigation 적용 시 hashbang은 제거되고 view_name으로 URL이 변경된다.
81~84라인을 확인하자.
확인하려면 각 View의 enter메서드에 hashCode값을 출력하도록 코딩해야 한다.
AddView argument 중 HomeView.class로 class를 전달한 경우(①)와 new DashBoard()로 instance를 전달한 경우(②)가 있다.
①의 경우 동일 UI내에서 요청이 있을 때마다 신규 instance가 생성되고,
②의 경우 동일 UI내에서 요청이 있을때마다 instance가 존재할 경우 재사용(static) 한다.
package com.vseminar.vaadin_seminar2;
import javax.servlet.annotation.WebServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.annotations.Widgetset;
import com.vaadin.navigator.Navigator;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.CssLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.themes.ValoTheme;
import com.vseminar.vaadin_seminar2.view.AboutView;
import com.vseminar.vaadin_seminar2.view.DashBoardView;
import com.vseminar.vaadin_seminar2.view.HomeView;
import com.vseminar.vaadin_seminar2.view.UserListView;
/**
* This UI is the application entry point. A UI may either represent a browser window
* (or tab) or some part of a html page where a Vaadin application is embedded.
* <p>
* The UI is initialized using {@link #init(VaadinRequest)}. This method is intended to be
* overridden to add component to the user interface and initialize non-component functionality.
*/
/**
*
* Description
*
*
* @author hyperrookie@gmail.com
*
* @version 1.0.0
* @date 2018. 6. 18.
*=======================================================================
* Date Name Revision History
*=======================================================================
* 2018. 6. 18. hyperrookie@gmail.com Creation
*=======================================================================
*/
@SuppressWarnings("serial")
@Theme("vseminar")
@Widgetset("com.vseminar.vaadin_seminar2.VSeminarWidgetset")
public class VSeminarUI extends UI {
private static final Logger logger = LoggerFactory.getLogger(VSeminarUI.class);
private Navigator navigator;
@Override
protected void init(VaadinRequest vaadinRequest) {
logger.debug("vaadinRequest ----------> {}", vaadinRequest);
final HorizontalLayout layout = new HorizontalLayout();
final VerticalLayout menu = new VerticalLayout();
final CssLayout content = new CssLayout();
layout.setSizeFull();
layout.setSpacing(true);
layout.setMargin(true);
menu.setWidth(200,Unit.PIXELS);
menu.setSpacing(true);
menu.setDefaultComponentAlignment(Alignment.TOP_CENTER);
content.setStyleName("layout-with-border");
content.setSizeFull();
layout.addComponents(menu,content);
layout.setExpandRatio(content, 1);
setContent(layout);
navigator = new Navigator(this, content);
navigator.addView(HomeView.VIEW_NAME, HomeView.class);
navigator.addView(DashBoardView.VIEW_NAME, new DashBoardView());
navigator.addView(UserListView.VIEW_NAME, new UserListView());
navigator.addView(AboutView.VIEW_NAME, new AboutView());
Button button1 = new Button("Home");
button1.setWidth(90,Unit.PERCENTAGE);
button1.addClickListener(e->{
navigator.navigateTo(HomeView.VIEW_NAME);
});
Button button2 = new Button("Dashboard");
button2.setWidth(90,Unit.PERCENTAGE);
button2.addClickListener(e->{
navigator.navigateTo(DashBoardView.VIEW_NAME);
});
Button button3 = new Button("UserList");
button3.setWidth(90,Unit.PERCENTAGE);
button3.addClickListener(e->{
navigator.navigateTo(UserListView.VIEW_NAME);
});
Button button4 = new Button("About");
button4.setWidth(90,Unit.PERCENTAGE);
button4.addClickListener(e->{
navigator.navigateTo(AboutView.VIEW_NAME);
});
menu.addComponents(button1, button2, button3, button4);
}
@WebServlet(urlPatterns = "/*", name = "VSeminarUIServlet", asyncSupported = true)
@VaadinServletConfiguration(ui = VSeminarUI.class, productionMode = false)
public static class VSeminarUIServlet extends VaadinServlet {
}
}
'front-end & ui > vaadin legacy' 카테고리의 다른 글
크롬 브라우저 캐시 불능 처리 (0) | 2018.06.27 |
---|---|
vaadin Layout 수동 교체? (0) | 2018.06.18 |
vaadin Polling 실습 (0) | 2018.06.17 |
vaadin session 실습 (0) | 2018.06.17 |
vaadin layout 실습 (0) | 2018.06.16 |