2011-11-02 4 views
1

나는 대학을위한 개찰판 응용 프로그램을 개발 중이며 다소 (다소 까다로운) 문제에 부딪쳤다.개찰구 상속 문제

일부 컨텍스트를 넣으려면 : HTML5 플레이어를 사용하는 응용 프로그램을 만들고 있습니다.이 솔루션은 플레이어를 포함하는 페이지의 생성자에게 쿼리를 만들고 해당 미디어의 소스를 검색하는 것이 었습니다 .

이제 내 문제는 템플릿을 사용하고 있으므로 머리글과 바닥 글을 자동으로 넣는 페이지를 만들었지 만 내 플레이어는 작동하려면 PageParameters이 필요하고 확장 할 수 있도록하려고합니다. BasePage에서부터 시작하지만, 기본 페이지의 생성자에는 일부 매개 변수가 있으므로 현재있는 페이지를 기반으로 헤더의 텍스트를 동적으로 변경할 수 있습니다.

protected BasePage(String tabHeader, String header) { 
    add(new Label("tab_title", tabHeader)); 
    add(new Header("header", header)); 
    add(new UserPanel("user_panel")); 
    add(new Footer("footer")); 
} 

그리고 내 선수 페이지 : 이것은 super() 까다로운 방법 퍼팅 수

public PlayerPage(PageParameters params) { 
    String name = params.get("name").toString(); 
    MediaItem item = getItem(name.trim()); 

    add(new Label("tab_title", "MaeGûl - " + name)); //trying to get rid of this 
    add(new Header("header", item.getName())); //and this 
    add(new UserPanel("user_panel")); //and this 

    if (item.getType().equals(ItemTypes.MUSIC)) { 
     add(new AudioPlayer("player", item.getMediaSources())); 
    } else if (item.getType().equals(ItemTypes.SERIES) 
      || item.getType().equals(ItemTypes.MOVIES)) 
     add(new VideoPlayer("player", item.getMediaSources())); 

    add(new Footer("footer")); //and this 
} 

을 당신이 볼 수있는 바와 같이, 내 PlayerPage 생성자가 업데이트 할 "이름"매개 변수를 필요에 super(tabHeader, header)를 넣어 경우 BasePage의 헤더와 tabHeader, 그래서 나는 바보짓을 했어.

어떤 해결책이 있겠 니?

protected BasePage(IModel<String> tabHeader, IModel<String> header) 

을 전용 모델, 예를 들어,에 값 검색을 위임 :

답변

2

당신은 문자열 대신 모델을 적용합니다 BasePage을 변경할 수 있습니다 AbstractReadOnlyModel에서 파생 된 다음 PageParameters를 얻기 위해 모든 구성 요소에서 사용할 수있는 방법은 물론,

public PlayerPage(PageParameters params) { 
    super(new TabHeaderModel(params), new HeaderModel(params)); 
    ... 
} 
+0

+1. 이것은 좋은 조언입니다. 생성자 args를 삭제하고 재정의 할 수있는 보호 IModel getTabHeaderModel()에서 가져올 수도 있습니다. –

+0

덕분에 나는 이것을 만들려고 노력할 것이고, 그것이 작동한다면 나는 같은 문제를 가진 누군가를 위해 해결책을 게시 할 것이다. –

+0

대단히 감사합니다. 이것은 완벽하게 작동했습니다. –

0

입니다. 그것은이다 .. getPageParameters()를 들어

getPage().getPageParameters(); 

이 null이 아닌 값을 반환하지만, 당신은 그러므로 당신의 BasePage 생성자 BasePage(PageParameters params)을 주장, super(params)와 개찰구 Page 생성자 호출해야합니다.

사실, 당신은 페이지의 대부분을 BookmarkablePageLinkPageParameters를 사용하는 경우 다음, 잠시이 만 생성자 Page(PageParameters params)를 구현해야 Page을 확장 아무것도 주위 재생 후. 세션 상대 페이지를 사용하고 많은 코드 유형 인 new PlayerPage()을 사용하는 경우에는 적용되지 않습니다.