2010-12-01 1 views
2

Wicket by Example guide을 따라 ObjectAutoCompleteField를 작동 시켰습니다. 매우 훌륭하게 작동합니다.ObjectAutoCompleteField에서 처음에 선택된 객체를 Wicket의 페이지로드시 표시

하지만 큰 문제가 있습니다. 페이지가로드 될 때 필드에 처음 설정된 개체를 표시하는 것입니다. 오브젝트는 ObjectAutoCompleteField가 사용되는 양식에 사용하는 모델에서 검색됩니다. ObjectAutoCompleteField를 변경하면 모델 속성이 "연결됨"으로 변경되고 필드의 후속 변경 사항은 페이지가로드 될 때 초기 레이블이 아닌 해당 위치에 적절한 레이블을 표시합니다. 편집 링크 만 표시됩니다. 자동 완성 기능으로 이동).

ObjectAutoCompleteBuilder 설명서를 둘러 보았지만 페이지로드시 초기 값을 명시 적으로 설정하는 방법이 없습니다.

답변

1

마침내 ObjectAutoCompleteField와 관련된 클래스를 살펴봄으로써 해결책을 찾을 수있었습니다.

ObjectAutoCompleteField는 ObjectAutoCompleteBuilder의 빌드 메소드에 의해 생성됩니다. 따라서 빌더에서 readOnlyRenderer 메소드를 호출하여 getObjectRenderer 내에 레이블을 작성하는 새 ObjectReadOnlyRenderer를 작성하여 ObjectAutoCompleteField를 가져 와서 페이지로드시 미리 선택된 객체를 렌더링합니다.

ObjectAutoCompleteBuilder<Author, Long> builder = new ObjectAutoCompleteBuilder<Author, Long>(provider); 
builder.readOnlyRenderer(new ObjectReadOnlyRenderer<Long>() { 
    public Component getObjectRenderer(String id, IModel<Long> pModel, IModel<String> pSearchTextModel) { 
     return new Label(id, new PropertyModel<Author>(model, "author")); 
    } 
}); 

사람은 이것이 표준 행동이라고 생각하지만 지금은 나중에 참조 할 수 있습니다.