2013-07-19 4 views
0

LDAP 연결 및 SQL 연결을 사용하는 일부 작업에서 옵션을 가져 오기 때문에 Webapp의 한 DropDownChoice 목록이 매우 오래 작성됩니다. 그리고 그 때문에 전체 페이지가 2 초 이상로드됩니다. 너무 많이 말할 것입니다.Wicket : Lazy loading DropDownChoice

그래서 달성하고 싶은 것은 Wicket의 내장 Ajax 기능을 사용하여이 드롭 다운을 게으른로드하는 것입니다.하지만 몇 가지 문제가 있습니다.

나는 일반 DropDownChoice 목록을 만드는 방법을 알고, 나를 위해 큰 일이 간단한 예제 - link (소스 코드 - -> LazyLoadingPage link

가 나는 또한 개찰구-예에서 게으른로드 단락을 만드는 방법을 알고. html/LazyLoadingPage.java)

하지만 함께 넣어 예외와 결과 내부 표정 오류가 발생합니다.

<select wicket:id="lazy"></select> 

자바 : HTML에서

:

private String selected = "abc"; 
(...) 
add(new AjaxLazyLoadPanel("lazy") { 

      @Override 
      public Component getLazyLoadComponent(String id) { 
       //simulating long time for simple list 
       try { 
        Thread.sleep(5000); 
       } 
       catch (InterruptedException e) { 
        throw new RuntimeException(e); 
       } 
       return new DropDownChoice<String>(
         id, new PropertyModel<String>(this,"selected"), 
         Arrays.asList("abc","def")); 

      } 
     }); 
    } 

그리고 난에두고, 개찰구에서 내부 오류를 받고 있어요 여기

내가 그것을 시도하는 방법이다 로그 :

ERROR Unexpected error occurred 
Component [content] (path = [0:lazy:content]) must be applied to a tag of type [select], not: '<div wicket:id="content">' (line 0, column 0) 
MarkupStream: [markup = jar:file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%207.0/webapps/devservices/WEB-INF/lib/wicket-extensions-1.5.7.jar!/org/apache/wicket/extensions/ajax/markup/html/AjaxLazyLoadPanel.html 

인덱스 = 0, current = ''

및 stacktrace.

정말 도움이 될 것입니다. 내가 잘못하고있는 부분이나 더 나은 코드 예제가 좋을 것 같습니다.

+3

는 패널 (또는 조각)에 DDC를 넣어 시도하고 구축/getLazyLoadComponent() – bert

+0

이를 반환은 다른 사람을 도움이 될 것입니다 희망! 완벽하게 작동합니다 - 정말 고마워요 !!! – Horuss

+0

또한 select2 개찰판 구현을 확인하십시오. https://github.com/ivaynberg/wicket-select2를 참조하십시오. – RobAu

답변

1

덕분에 bert 덕분에 누군가가 미래에 그것을 사용할 수 있도록 전체 솔루션을 제공 할 예정입니다.

AjaxLazyLoadPanel은 한 패널을 다른 패널로만 변경할 수 있기 때문에 자체 패널을 만들어야합니다. MyPanel.html의

예 :

<?xml version="1.0" encoding="UTF-8"?> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org"> 
<body> 
<wicket:panel> 
    <select wicket:id="project"></select> 
</wicket:panel> 
</body> 
</html> 

및 MyPanel.java :

<span wicket:id="lazy2"></span> 

을 메인 페이지 자바 : 메인 페이지 HTML에

public class MyPanel extends Panel { 
    private String selected = <what you want>; 
    private List<String> projectList <what you want>; 
    public MyPanel(String id) { 
     super(id); 
     add(new DropDownChoice<String>(
      "project", new PropertyModel<String>(this, "selected"), projectsList)); 
    } 
} 

단순히이 추가 파일 :

add(new AjaxLazyLoadPanel("lazy") { 
    @Override 
    public Component getLazyLoadComponent(String id) { 
     return new MyPanel(id); 
    } 
}); 

당신은 내 일했다 @bert 너무 :-)

관련 문제