Nếu tôi có thể thực hiện việc này, làm cách nào để gọi mã Java (các phương thức ví dụ) từ bên trong mã JavaScript, trong Wicket.Làm cách nào để gọi mã Java từ mã JavaScript trong Wicket?
Trả lời
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
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
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
vỡ liên kết http://wicketstuff.org/wicket13/ajax/ – Gorky
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)
và
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");
Đá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
Ồ, 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
cuối cùng liên kết không hoạt động –