문제

hy, 나는 특정 조건 (예 : 채우는 데이터가있는 경우에만)에서만 개찰구의 특정 부분 (예 : div)을 표시하고 싶습니다. 문제는:

데이터를 얻은 경우 패널 만 추가하는 경우 (DIV 채우기) 데이터없이 페이지를 호출 할 때마다 예외가 발생합니다 (참조 된 개찰구 ID가 구성 요소 트리에 추가되지 않기 때문에).

내 마음에 온 유일한 해결책은 데이터가없는 경우 빈 패널을 추가하는 것이 었습니다. Java 코드에 불필요한 코드와 렌더링 된 HTML에 많은 빈 DIV가 있었기 때문에 이것은 이상적인 솔루션이 아닙니다.

그렇다면 개찰구의 여러 부분을 조건 아래에만 포함시키는 더 나은 솔루션이 있습니까?

도움이 되었습니까?

해결책

여기서는 오래된 질문이지만 하나 더 해결책이 될 수 있습니다. 개찰구 : 인클로저 (그리고 이것 )

업데이트: 이제 나는 내 자신에 의해이 기능이 필요했습니다 ( 제트 윅). LoggedIn State에는 WebMarkupContainer 1 개와 로그 아웃 상태에 하나를 사용하고 올바른 가시성을 설정했습니다.

if (loggedIn()) {            
   WebMarkupContainer loggedInContainer = new WebMarkupContainer("loggedIn");
   //## do something with the user
   User user = getUserSomeWhere();
   loggedInContainer.add(new UserSearchLink("userSearchLink"));
   add(loggedInContainer);
   add(WebMarkupContainer("loggedOut").setVisible(false));
} else {
   add(new WebMarkupContainer("loggedIn").setVisible(false));
   WebMarkupContainer loggedOutContainer = WebMarkupContainer("loggedOut");
   loggedOutContainer.add(new LoginLink() {...});
   add(loggedOutContainer);
}

이것의 장점은 // ## 표시된 선에서 nullpointerexc를 방지하고 개찰구의 Enclose 기능이 나에게 더 추악 해 보일 것이라는 점입니다.

다른 팁

@MiaUbiz가 말했듯이, 가시성이 다른 상태 (예 : 필드가 채워짐)에 대한 조건부 인 경우 setVisible (false)을 호출하거나 isvisible () 메소드를 무시할 수 있습니다.

예, 당신은 isvisible을 무시하고 싶습니다. 이렇게하면 isvisible = false html 마크 업이 최종 HTML 페이지로 렌더링되는 것을 막을 수 있습니다. 또한 문서에 따르면 (언급 emptypanel), 당신은 사용할 수 있습니다 WebMarkupContainer 랩핑 구성 요소로.

    this.add(new SimpleResourceModelLabel(NO_DATA_LABEL){
        private static final long serialVersionUID = 1L;

        @Override
        public boolean isVisible() { return myList.isEmpty(); } 
    });

    final WebMarkupContainer table = new WebMarkupContainer(MY_DATA_TABLE){
        private static final long serialVersionUID = 1L;

        @Override
        public boolean isVisible() { return !myList.isEmpty(); } 
    };

나는 이것이 이유라고 생각합니다 emptypanel. 당신의 코드에 대해 더 많이 알지 못하면 나는 당신이하고 있다고 생각하는 것이 내가 일부 자녀의 조합으로하는 일이라고 말할 수 있습니다. ABSTRACTREPEATER 그리고 파편. 당신이하고 싶은 일에 대해 더 기꺼이 말하고 코드를 제공 할 수도 있다면, 가능한 한 많은 도움을 드릴 것입니다.

setVisible (false) 호출 할 수 있습니다. 숨길 구성 요소에서.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top