2008-10-02 35 views

Trả lời

14

erk. Câu trả lời đúng sẽ là ajax call backs. Bạn có thể tự mã js để móc vào jicket wicket, hoặc bạn có thể thiết lập callbacks từ các thành phần wicket trong java. Ví dụ, từ AjaxLazyLoadPanel:

 component.add(new AbstractDefaultAjaxBehavior() { 

     @Override 
     protected void respond(AjaxRequestTarget target) { 
      // your code here 
     } 

     @Override 
     public void renderHead(IHeaderResponse response) { 
      super.renderHead(response); 
      response.renderOnDomReadyJavascript(getCallbackScript().toString()); 
     } 

     } 

Ví dụ này cho thấy làm thế nào để thêm gọi lại mã để bất kỳ thành phần trong Wicket. Sau khi sự kiện OnDomReady kích hoạt trong trình duyệt của bạn, khi tải một trang, Wicket sẽ gây ra js enging, để gọi lại mã của bạn, sử dụng Ajax, đến phương thức 'respond' được hiển thị ở trên, tại thời điểm đó bạn có thể thực thi mã Java trên máy chủ và có khả năng thêm các thành phần vào mục tiêu ajax để được hiển thị lại.

Để thực hiện thủ công, từ js, bạn có thể móc vào hệ thống của wicket bằng cách in ra getCallbackScript(). ToString() thành thuộc tính trên thành phần wicket, sau đó bạn có thể truy cập từ js. Gọi url này từ js theo cách thủ công với wicket's wicketAjaxGet từ wicket-ajax.js.

Kiểm tra danh sách gửi thư cho rất nhiều của cuộc nói chuyện về chủ đề này: http://www.nabble.com/Wicket-and-javascript-ts24336438.html#a24336438

+9

cuối cùng liên kết không hoạt động –

0

Giả sử bạn có nghĩa là JavaScript đang chạy trên máy khách - bạn gây ra một chuyển hướng HTTP được gửi tới máy chủ và yêu cầu servlet của bạn phản ứng với yêu cầu cho URL đã cho.

này được gọi là Ajax, và có một number của libraries giúp bạn làm điều đó ..

5

http://www.wicket-library.com/wicket-examples-6.0.x/index.html/ có rất nhiều ví dụ để giúp bạn có được đi.

Hoặc có một Có một cái nhìn tại DWR

http://directwebremoting.org/

DWR cho phép Javascript trong trình duyệt để tương tác với Java trên máy chủ và giúp bạn thao tác trang web với kết quả.

Do Dorward đề cập đến việc này được thực hiện qua AJAX

+0

vỡ liên kết http://wicketstuff.org/wicket13/ajax/ – Gorky

5

Trích từ https://cwiki.apache.org/WICKET/calling-wicket-from-javascript.html

Nếu bạn thêm bất kỳ lớp mà kéo dài AbstractDefaultAjaxBehavior vào trang của bạn, wicket-ajax.js sẽ được bổ sung vào tiêu đề của trang web của bạn. wicket-ajax.js cung cấp cho bạn hai phương pháp cơ bản để gọi thành phần của bạn:

function wicketAjaxGet(url, successHandler, failureHandler, precondition, channel) 

function wicketAjaxPost(url, body, successHandler, failureHandler, precondition, channel) 

Dưới đây là một ví dụ:

Javascript

function callWicket() { 
    var wcall = wicketAjaxGet('$url$' + '$args$', function() { }, function() { }); 
} 

$url$ là thu được từ phương pháp abstractDefaultAjaxBehavior.getCallbackUrl(). Nếu bạn dán Chuỗi được trả về từ phương thức đó vào trình duyệt của bạn, bạn sẽ gọi phương thức trả lời, cùng áp dụng cho phương thức javascript.

Bạn có thể tùy ý thêm đối số bằng cách thêm các đối số này vào chuỗi URL. Họ lấy mẫu &foo=bar.

bạn nhận được đối số tùy chọn trong phương pháp phản ứng Java như thế này:

Map map = ((WebRequestCycle) RequestCycle.get()).getRequest().getParameterMap(); 

hay này:

String paramFoo = RequestCycle.get().getRequest().getParameter("foo"); 
+1

Đáng nói đến là API để trích xuất tham số đã thay đổi trong Wicket 1.5. GetLequest() 'để lấy một đối tượng' Request', bạn phải gọi 'getQueryParameters()' (đối với các tham số GET), 'getPostParameters()' (đối với các tham số POST), hoặc 'getRequestParameters() '(cho tất cả cùng một lúc). Mỗi trả về một cá thể 'IRequestParameters' mà bạn có thể truy vấn các tham số. Xem [tài liệu API] (http://wicket.apache.org/apidocs/1.5/). – cooperised

+0

Ồ, và một hình ảnh xác thực: URL được trả về bởi 'getCallbackUrl()' có thể thay đổi trong chu kỳ xây dựng thành phần. Nó thường không chính xác nếu bạn cố gắng sử dụng nó trong constructor, và callbacks sẽ thất bại như là một kết quả. Tôi đã thành công khi sử dụng nó để ghi đè lên 'onBeforeRender()' của thành phần thay thế. – cooperised

Các vấn đề liên quan