[英]GWT Form upload without refresh or forward
我想知道是否應該對GWT com.google.gwt.user.client.ui.FileUpload
進行上傳而不上傳或轉發到服務器的操作。
我已經從此Java Doc實現了表單上傳,但是它將瀏覽器頁面轉發到目標服務器URL。
如何在不轉發的情況下實現表單上傳?
更新:
final FormPanel form = new FormPanel();
form.setAction("/upload");
form.setEncoding(FormPanel.ENCODING_MULTIPART);
form.setMethod(FormPanel.METHOD_POST);
VerticalPanel panel = new VerticalPanel();
form.setWidget(panel);
final TextBox tb = new TextBox();
tb.setName("textBoxFormElement");
panel.add(tb);
// Create a FileUpload widget.
FileUpload upload = new FileUpload();
upload.setName("uploadFormElement");
panel.add(upload);
DOM.getElementById("form_panel").appendChild(panel.getElement());
Button submit = new Button("Submit");
panel.add(submit);
DOM.sinkEvents(submit.getElement(), Event.ONCLICK);
DOM.setEventListener(submit.getElement(), new EventListener(){
@Override
public void onBrowserEvent(Event event) {
if (event.getTypeInt() == Event.ONCLICK) {
form.submit();
return;
}
}});
form.addSubmitHandler(new FormPanel.SubmitHandler() {
public void onSubmit(SubmitEvent event) {
if (tb.getText().length() == 0) {
Window.alert("The text box must not be empty");
event.cancel();
}
}
});
form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
public void onSubmitComplete(SubmitCompleteEvent event) {
Window.alert(event.getResults());
}
});
IMO,您正在使事情變得比他們復雜。
我不明白為什么,如果您使用的是小部件,那么您將嘗試手動管理DOM。
1.-使用GWT方式將表單面板附加到根面板,否則將破壞小部件層次結構。
RootPanel.get("form_panel").add(panel);
2.-盡量不要手動使用接收器事件,而應使用小部件中已經存在的方法:
submit.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
form.submit();
}
});
FormPanel
將其目標設置為隱藏的<iframe>
因此您將永遠不會重定向到另一個頁面。
順便說一句,我寧願使用gwtupload庫,該庫簡化了GWT中的大量上載代碼,並添加了許多其他功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.