2011-04-08 1 views
0

Wicket 구성 요소를 페이지에 대한 모든 AJAX 요청에서 다시 렌더링하도록 만드는 방법이 있습니까? (기본적으로 ajaxRendered="true"가 RichFaces에서 무엇을 할 수 있습니다.)페이지에 대한 모든 AJAX 요청에서 다시 렌더링되는 개찰 부품을 만드는 방법은 무엇입니까?

는 내 응용 프로그램은 기본적으로 다음과 같이 구성

:

  • 편집 가능한 데이터 그리드 레코드는 사용자가
  • 이러한 변화가 세션에 저장하고있다 변경
  • 변경 사항을 저장하거나 취소 할 수있는 버튼이 있습니다.

기록 된 변경 사항이 있는지 여부에 따라 저장 및 실행 취소 버튼이 활성화 또는 비활성화되어야합니다. 변경 사항을 입력하는 몇 가지 방법 (편집, CSV 가져 오기 등)이 있기 때문에 저장된 상태를 변경할 수있는 모든 작업을 가로 챌 필요가 없습니다.

또한 버튼은 일부 페이지에만 표시되므로 사용자 정의 WebRequestCycle 페이지에서 해당 버튼을 스니핑하지 않아도됩니다.

AJAX 요청이 처리 될 때 Wicket이 호출하는 고리가 페이지의 모든 구성 요소에 대해 호출됩니까? Component#onBeforeRender()Component#onConfigure()이 있다는 것을 알고 있지만, AJAX 요청을받을 때 문서가 명시되어 있지 않습니다.

답변

2

나는 비슷한 문제가있어서 두 번째 해결 방법을 생각해 보았다.

  1. 전화 대상에 추가 차례로 다시 렌더링 할 필요가있는 모든 차일를 찾는 방문자를 호출 아약스 - 처리기, 귀하의 페이지에 방법.

  2. 옵저버 패턴의 변형 ... 내 구성 요소를 페이지에서 wantToUpdate로 등록하고 함수를 트리거하여 Ajax 처리기의 Requesttarget에 추가했습니다. 내 구성 요소가 서로를 알지 못하기 때문에 상자의 옵저버 패턴을 사용할 수 없으며 이러한 종류의 커플 링을 도입하고 싶지 않습니다.

+0

나는 관찰자 패턴의 변형을 선호합니다. 첫 번째 행동과 먼 거리에서의 행동이 나를 깜짝 놀라게합니다. – biziclop

+0

1.4에서 이벤트 버스를 가짜로 만드는 방법 1을 사용해야합니다. – millimoose

9

Wicket 1.5에는 이벤트 버스가 있습니다. 각 Ajax 요청에 대해 이벤트가 각 구성 요소로 보내지고 구성 요소는 AjaxRequestTarget을 사용하여 자체 렌더링을 다시 추가 할 수 있습니다.

예컨대 :

class MyComponent ... { 

public void onEvent(Object payload) { 

    if (payload instanceod AjaxRequestTarget) { 
    ((AjaxRequestTarget) payload).add(this); 
    } 
}