DBILITY

독거 가능성 100% 노후에 라면값이라도 하게 센스를 발휘합시다!😅
Please click on the ad so that I can pay for ramen in my old age!
点击一下广告,让老后吃个泡面钱吧!
老後にラーメン代だけでもするように広告を一回クリックしてください。

vaadin flow router exception handling 본문

front-end & ui/vaadin flow

vaadin flow router exception handling

DBILITY 2018. 9. 10. 16:51
반응형

공식 사이트 문서를 참조하여 작성하였다.

 

navigation 중 발생하는 처리되지 않은 오류에 대해 사용자에게 표시하는 navigation target을 지원한다.

일반적인 navigation target과 동작 방식은 같으나, @Route annotation을 통해 navigation target을 지정하지 않는다.

 

navigation 중 발생하는 exception type에 따라 target을 결정하는데,

HasErrorParameter<T extends Exception>를 구현하는 모든 class는 navigation 중 발생하는 모든 오류를 수집한다.

 

다음은 주어진 url에 대한 target이 존재하지 않을 경우, NotFoundException을 수집하여 사용자 화면에 나타낸다.

@Tag(Tag.DIV)
public class RouteNotFoundError extends Component implements HasErrorParameter<NotFoundException> {

	@Override
	public int setErrorParameter(BeforeEnterEvent event, 
				ErrorParameter<NotFoundException> parameter) {

		getElement().setText(String.format("요청하신 %s 경로가 존재하지 않습니다.", 
						event.getLocation().getPath()));

		return HttpServletResponse.SC_NOT_FOUND;
	}
}

 

예외는 원인이 되는 오류에 대해 먼저 실행이 되고, 해당 예외의 super type이 실행된다.

아래와 같이 RouteNotFoundError를 상속받은 CustomNotFoundTarget을 구현한 경우 404 오류 발생 시 CustomNotFoundTarget이 실행된다.

@ParentLayout(MainLayout.class)
public class CustomNotFoundTarget extends RouteNotFoundError {

	@Override
	public int setErrorParameter(BeforeEnterEvent event, 
				ErrorParameter<NotFoundException> parameter) {

			getElement().setText(String.format("요청하신 %s 경로가 존재하지 않습니다."
				+ "에러처리 class는 %s입니다.",
				event.getLocation().getPath(),this.getClass().getName()));

		return HttpServletResponse.SC_NOT_FOUND;
	}
}

BeforeEnterEvent 및 BeforeLeaveEvent에서 event.rerouteToError 메서드를 이용해 예외에 대해 등록된 error target으로 경로를 재지정할 수 있다.

 

반응형
Comments