2012-10-24 5 views
4

내가 개찰구 6.1 사용하고 난 내 페이지 흐름이 더 좋은, 더 북마크 된 URL의이 있는지 확인하는 방법을 알아 내려고 노력하고 있어요로 유형 안전 페이지 생성자를 매핑. 나는 다음과 같은 코드가개찰구 : 읽을 수있는 URL

class SearchResultsPage extends WebPage { 
    public SearchResultsPage(SearchResultsModel model) { 
    // display the data in the model 
    } 
} 

페이지로 이동하려면 :

AjaxButton ajaxButton = new IndicatingAjaxButton("ajaxbutton") { 
    @Override 
    protected void onSubmit(AjaxRequestTarget target, Form<?> form) { 
     SearchResultsModel results = search(kriteriamodel)     
     getRequestCycle().setResponsePage(new SearchResultsPage(results)); 
    } 

    @Override 
    protected void onError(AjaxRequestTarget target, Form<?> form) { 
     target.add(feedback); 
    } 
}; 

을 지금은 도달하면

나는 많은, 그래서 내 코드는 일반적으로 다음과 같이 표시됩니다 유형 안전 생성자를 사용 결과 페이지 내 URL이의 SearchResult처럼 보일 것인가?

내가 좋아하는 것 (5)는 URL에 검색 매개 변수를 인코딩 할 수 있도록하는 사용자 나중에 referal에 대한 북마크 할 수 있었다.

나는 내가 PageParameters 맵을 사용하여 수동으로 그 구조에서 내 개체를 매핑 할 수 있음을 알고 있습니다. 그러나 나는 더 우아한 솔루션을 찾고 있습니다.

  • 은 내 페이지 또는 모델 페이지가 더 북마크 된 있도록 구현해야한다는 일부 영리한 인터페이스에 대한 포인터를 찾고 있어요.
  • 예도 좋습니다. 페이지/모델에
  • 이상적으로 만 코드를 변경해야합니다.

감사합니다. 내가 할 것이 무엇

답변

2

는 다음과 같이이다 : 당신의 페이지를 즐겨 찾기가된다

class SearchResultsPage extends WebPage { 

    public static PageParameters convertModelToParam(SearchResultsModel model) { 
    ... 
    } 

    public static SearchResultModel convertParamToModel(PageParameters param) { 
    //this is for convenience only 
    ... 
    } 

    public SearchResultsPage(PageParameters param) { 
    this(convertParamToModel(param)); 
    } 

    private SearchResultsPage(SearchResultsModel model) { 
    // display the data in the model 
    } 
} 

이 방법하지만 당신은 당신의 형태 보증 된 생성자를 계속 얻을. 여기에 명백한 결함은 PageParameters을 허용하는 생성자를 사용하면 적절한 변환 방법에서 생성되었는지 확인할 수있는 방법이 없다는 것입니다. 그러나 그것에 대해 생각할 때, 그것은 실제 세계의 정확한 모델입니다. 사용자는 URL에서 쿼리 문자열을 자유롭게 편집 할 수 있으며 응용 프로그램이이를 처리 할 수 ​​있어야합니다.

번 페이지 매개 변수는 사용자의 입력이되고 당신이 당신의 비즈니스 객체로 변환하기 전에 그러므로 그들은 절대적으로 살균해야합니다, 북마크 할 수 있습니다 기억하십시오. 자동화 된 시스템으로는 그렇게 할 수 없습니다.

+0

너의 실용적인 솔루션입니다. 나는 당신에게 그것을 준다. 나는 자동화 된 솔루션을 찾고 있지 않다. 어느 시점에서 내 객체를 페이지 매개 변수에 매핑해야한다는 것을 알고 있습니다. 하지만 나는 _elegant_ 솔루션을 원했습니다. 내 페이지가 구현할 수있는 페이지 및/또는 일부 인터페이스를 탑재하는 영리한 방법. 나는 정적 메서드를 경멸하고 당신의 솔루션으로 좋은 타입의 정적 메서드 인 instad를 호출해야한다는 것을 기억해야한다. –

+0

내가 찾던 것이 아니었지만 어쨌든 당신의 대답을 받아 들일 것입니다. –

+0

물론이 주제에는 많은 변형이 있습니다. 개념을 설명하기 위해 정적 메서드를 추가했지만 아키텍처에 따라 모든 변환을 수행하는 별도의 팩터 리를 만들거나 모델 개체 자체의 인스턴스 메서드/생성자에서 변환을 수행 할 수 있습니다. – biziclop