2017-02-22 3 views
0

WebPage 하위 클래스 페이지를 고려하십시오. 생성자는 을 만들고 을 추가합니다. ListView 구성 요소 에 LoadableDetachableModel이 저장되어 있습니다.Wicket Page의 ListView LoadableDetachableModel은 AJAX 호출을 통해 수정됩니다. 페이지가 다시 그려지지 않습니다

이 페이지는 AbstractDefaultAjaxBehavior [각각 renderHeadrespond 메서드를 재정의하는 익명 하위 클래스의 인스턴스 2 개를 추가합니다.

대응하는 HTML은 <div>는 WMC 에 wicket:id 구속과 <table><tr>와 년대가 ListView 구성 요소의 ListItems에 바인딩이 포함되어 있습니다.

페이지가 처음 올바르게 표시됩니다.

클라이언트와의 사용자 상호 작용을 기준으로 문제의 AbstractDefaultAjaxBehavior이 모델의 모델 객체에 대한 정보를 설정합니다. 이 정보는 특정 listitem이 표의 행에 <td>으로 나타나는 방식을 변경하는 데 사용됩니다. 특히 선택한 행의 텍스트는 굵게 표시되어야합니다.

진단 디버거 중단 점 및 AJAX 호출의 양쪽에 System.out 정보는 행동의 respond 방법은 제대로 호출되고 있는지와 모델 객체가 제대로 수정되고 있음을 확인합니다.

페이지가 자동으로 다시 그려지지 않습니다. 페이지를 수동으로 다시로드하면 브라우저가 올바르게 작동합니다.

나는이 문제를 연구하고

와 함께 동작의 respond 방법에서 target.add(webMarkupContainer);을 요구하는을 포함하여 내가 해봤 가능성 관련 다양한 솔루션,

  • 을 발견했습니다

  • respond 방법 중 target.appendJavaScript("window.location.reload();");을 호출하십시오.

  • respond 방법에서 setResponsePage(this);, setResponsePage(Page.class);setResponsePage(getPage());를 호출

    뿐만 아니라 페이지에서 오버라이드 (override) onBeforeRender 방법에서.

의견이 있으십니까?

답변

0

AbstractDefaultAjaxBehavior는 모든 구성 요소를 자동으로 업데이트하지 않습니다.

target.add(webMarkupContainer) 도움이 되었습니까? 그렇지 않다면 webMarkupContainer.setOutputMarkupId(true)에 전화하셨습니까?

+0

여러 조합으로 둘 다 성공적으로 사용하지 않았습니다. 나는 당신의 리드를 따라'AbstractDefaultAjaxBehavior'를 만들고 문제가있는 이벤트에 대한 구현을'AjaxEventBehavior'처럼 다시 수행했습니다. 팁 주셔서 감사합니다 - 나는 길을 따라 그 유용한 비트를 놓친 것 같아요.누군가가 신경 쓸 필요가 없다면 추상 클래스의 업데이트되지 않는 성격이 기술되어있는 관련 참조 정보를 가리킬 수 있습니까? 다시 한번 감사드립니다. –