2009-06-19 39 views
6

Tôi đã thử điều này trong vài ngày nay mà không có may mắn.Không thể tải GWT FormPanel để hoạt động chính xác

final FormPanel form = new FormPanel(new NamedFrame("test")); 
form.setAction("/designer"); 
form.setMethod(FormPanel.METHOD_POST); 
VerticalPanel panel = new VerticalPanel(); 
form.setWidget(panel); 

final TextBox tb = new TextBox(); 
tb.setName("style"); 
panel.add(tb); 
panel.add(new Button("Submit", new ClickHandler() { 
public void onClick(ClickEvent event) { 
    Window.alert("submitting to:" + form.getTarget()); 
    form.submit(); 
    } 
})); 
form.addSubmitCompleteHandler(new SubmitCompleteHandler() { 
public void onSubmitComplete(SubmitCompleteEvent event) { 
    Window.alert("complete"); 
    Window.alert(event.getResults()); 
} 
}); 

Ở chế độ được lưu trữ, không có gì xảy ra sau khi cảnh báo "Gửi tới". Trong Chrome, biểu mẫu tải trong một tab riêng biệt, nhưng bản thân POST sẽ trống. Trong Firefox và IE, một lần nữa, không có gì xảy ra sau khi cảnh báo. Bất kỳ ý tưởng?

Tôi đã thiết lập một servlet tại/designer để xuất ra tiêu đề yêu cầu và nội dung từ bất kỳ yêu cầu trang nào. Tôi có thể nhấn servlet này từ một trang HTML đơn giản và xem kết quả mong đợi. Từ GWT, không có yêu cầu nào xuất hiện (ngoại trừ Chrome, trong đó yêu cầu xuất hiện, nhưng có phần thân trống).

Trả lời

1

Mã của bạn gần giống với ví dụ trên FormPanel API, do đó tôi phải giả định rằng logic là chính xác.

Có một servlet tồn tại ở "/ designer" không? Tài liệu cho SubmitCompleteHandler nói rằng sự kiện onSubmitComplete chỉ kích hoạt nếu quá trình gửi thành công.

Đây là một chủ đề có chứa một số mẫu mã để viết một servlet để xử lý các bài dạng: http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/77e68fcb9097debc

2

Hãy thử di chuyển form.setWidget(panel); để phía dưới.

Ngoài ra, hãy đảm bảo rằng bạn thêm biểu mẫu vào bảng điều khiển vùng chứa, ví dụ: add(form);, không phải bảng điều khiển dọc.

0

Tôi biết bài này là 3 tuổi, nhưng vì lợi ích của bất kỳ googler như tôi, rồi đến đây, này là những điều kiện cho OnSubmitCompleteEvent để bị sa thải:

  1. Sử dụng không -arg constructor để tạo biểu mẫu: FormPanel f = new FormPanel();. Như đã đề cập trong số Javadoc:

    Tạo FormPanel mới. Khi tạo ra sử dụng constructor này, nó sẽ được nộp cho một ẩn <iframe> phần tử, và các kết quả của nộp làm sẵn qua {SubmitCompleteHandler @link}.

    Vì vậy, nó là người duy nhất kích hoạt gửi biểu mẫu hoàn thành sự kiện khi thành công.

  2. Hãy chắc chắn rằng các hành động được gọi là trả về một phản ứng với content-type: "text/html"

Một giải pháp, nếu bạn vẫn cần phải sử dụng của bạn bên ngoài NamedFrame, là để xem cho LoadEvent trên khung. Nó được kích hoạt khi khung bắt đầu tải, có nghĩa là phản hồi từ máy chủ đến: ...

NamedFrame frame = new NamedFrame("test"); 
frame.addLoadHandler(new LoadHandler() 
{ 
    void onLoad(LoadEvent event) 
    { 
     //your code here 
    } 
}); 

Hy vọng điều đó sẽ hữu ích!

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