2013-03-18 3 views
1

저는 Wicket을 사용하여 웹 사이트에서 검색 광고를위한 UI를 구축하고 있습니다. 사용자가 입력하는 동안 결과가 드롭 다운에 표시됩니다. 다른 객체를 많이 가지고 있기 때문에 (각기 다른 디스플레이 구조로) 여러 패널을 정의하고 싶습니다. 따라서 db에서 발견 된 각 항목에 대해 올바른 패널과 올바른 구조를 얻습니다. 그래서 예를 들면 : 검색자가 사용자를 찾으면 이름 만 표시해야합니다. 그림이 발견되면 미리보기 이미지와 설명 등이 표시됩니다.Autocompletetextfield에서 String 대신 패널 사용

지금은 AutocompleteTextField를 사용하고 있지만 문자열 만 사용합니다. 나는 문자열에 html을 추가하고 그것을 보여줄 것을 생각했다. 하지만 실제로는 깨끗한 솔루션이 아니기 때문에 패널을 사용할 생각입니다.

그래서 누구나 AutoCompleteTextField에서 문자열 대신 패널을 사용할 수있는 방법을 알고 계십니까?

+1

대신 패널의 조각을 사용할 수도 있습니다. – biziclop

답변

3

자신 만의 구성 요소를 만듭니다. ListView를 사용하여 WebMarkupContainer에 넣습니다. TextField 입력을 기반으로 WebMarkupContainer를 표시하고 TextField에 첨부 된 OnChangeAjaxBehavior에서 ListView를 새로 고칩니다.

이렇게하면 원하는 것을 완벽하게 제어 할 수 있습니다. ListView에 대한

예제 코드 : 표시 할 여러 가지의 수와 특성에 따라 아래의 답변에 추가

private ListView getLv(){ 
     ListView lv = new ListView(PANEL, new PropertyModel(this, "someList")) { 
     @Override 
     protected void populateItem(ListItem item) { 
      Integer type = item.getModelObject().getType(); 
      if (type == 1) { 
       item.add(new PanelType1("panel", item.getModelObject().someIdMaybe)); 
      } else if (type == 2) { 
       item.add(new PanelType2("panel", item.getModelObject().someIdMaybe)); 
      } 
     } 
     }; 
     return lv; 
    } 
+0

제안에 감사드립니다. 그것을 볼 것입니다 – Merlijn

+0

어떤 종류의 구성 요소를 목록에 표시 할 수 있습니까? 궁극적으로 나는 그 한계에 빨리 도달 할 것이므로 레이블 만 사용하고 싶지 않습니다. 나는 Component 클래스에서 확장하여 스스로 만들거나 조각을 사용할 수 있습니까? – Merlijn

+0

원하는 패널. ListView를 채우는 방법을 보여주는 코드를 추가했습니다. –

3

AutoCompleteTextFieldnewAutoCompleteBehavior -hookmethod를 사용하여 선택 사항을 표시하는 동작을 만듭니다. 이 hookmethod는 인수로 IAutoCompleteRenderer을 취합니다. 이 렌더러는 실제로 표시 부분을 수행합니다. 따라서 자신의 렌더러를 AutoCompleteTextField에 전달하거나 (생성자를 수락하는 생성자가 있음) AutoCompleteTextField 하위 클래스를 사용하여 팩토리 메서드를 재정의 할 수 있습니다. 어쨌든 당신은 자신의 구현 인 IAutoCompleteRenderer을 만들어야 할 것입니다. 왜냐하면 개찰과 같은 구현이 없기 때문이며 렌더러 자체는 현재 애플리케이션 디자인에 크게 영향을받을 것입니다.

+0

네, 답변 해 주셔서 감사합니다. 나는 이미 이것에 대해 생각했지만 비밀리에 더 간단한 방법이 될 것으로 기대했다 : p – Merlijn

+0

@Merlijn 가장 쉬운 해결책은 렌더러가 행동에 문자열을 제공해야하므로 Robert Niestroj가 제안한 것 같다. – Nicktar

1

패널이 구성 요소이기 때문에 패널을 사용할 수 없다고 생각합니다. 그 자체는 아무거나 될 수 있습니다. 모든 패널을 자동 완성 목록의 일부로 지원하는 것은 너무 어려울 것입니다. 자동 완성 필드가있는 양식으로 자동 완성 요소를 사용하는 것이 재미있을 것입니다.)

따라서 요소에 대한 HTML 마크 업을 생성 할 수 있지만 패널이 아닌 것은 IAutoCompleteRenderer 인터페이스가있는 이유입니다.

옵션으로, 아마 ModalWindow을 사용하여 모달 팝업 아약스 대화 상자를 사용할 수 있습니다.

+0

고마워. 제안 – Merlijn