DBILITY

vaadin flow routing and URL parameters 본문

front-end & ui/vaadin flow

vaadin flow routing and URL parameters

DBILITY 2018. 9. 10. 09:55
반응형

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

 

Query String과 구분할 수 있어야 한다. Path Variable로 생각하면 쉽다.

 

Navigation시 url parameter를 지원하기 위해 HasUrlParameter interface를 구현하고, Generic Type으로 parameter를 정의하여야 한다.

HasUrlParameter interface의 setParameter 메서드를 구현하게 되는데, 이 메서드는 rotuer api에 의해 Navigation Target 활성화되기 전에 항상 호출된다.

다음 예시는 "greet" 경로로 접근시 String Type의 parameter를 정의하고, GreetingComponent내에 setText로 인사말 String을 설정한다.

@Route(value = "greet")
public class GreetingComponent extends Div implements HasUrlParameter<String> {

    public GreetingComponent() {
        getElement().setAttribute("style", "padding:5px 0 0 10px");
    }
    @Override
    public void setParameter(BeforeEvent event, String parameter) {
        setText(String.format("어서와 %s 바딘은 처음이지?!", parameter));
    }
}

 

위 예제의 경우 항상 parameter가 설정되어야 하며 없을 경우 오류가 발생한다. 존재하지 않는 경우도 동일 Url을 사용할 경우가 있을 수 있다. 다음과 같이 parameter 변수를 @OptionalParameter Annotaion으로 설정하면 된다.

@Route("greet")
public class GreetingComponent extends Div implements HasUrlParameter<String> {

    public GreetingComponent() {
        getElement().setAttribute("style", "padding:5px 0 0 10px");
    }
    @Override
    public void setParameter(BeforeEvent event, @OptionalParameter String parameter) {
        if (parameter == null) {
            setText("없다니 경로가 의심스롭네");
        } else {
            setText(String.format("어서와 %s 바딘은 처음이지?!", parameter));
        }
    }
}

 

위 두 예제는 "greet/welcome"등과 같이 명시적인 경우를 제외하고, "greet/모든 경로"형식에 대해 자동으로 구성된다. 이로 미루어 볼 때 URL 확인 시 동작 방식은 명시적 설정 값을 우선하며, Optional Parameter가 있는 경우에도 예외가 아니다. 그냥 상식적으로 생각하자.

@Route("greet")
public class GreetingComponent extends Div implements HasUrlParameter<String> {

    public GreetingComponent() {
        getElement().setAttribute("style", "padding:5px 0 0 10px");
    }
    @Override
    public void setParameter(BeforeEvent event, @WildcardParameter String parameter) {
        if (parameter.isEmpty()) {
            setText("없다니 경로가 의심스롭네");
        } else {
            setText(String.format("어서와 %s 바딘은 처음이지?!", parameter));
        }
    }
}

다수의 parameter가 필요한 경우 @WildcardParameter Annotation으로 처리할 수 있다.

 

반응형
Comments