1

我可以选择在我的 webapp 中上传文件,而且我已经完成了,但是有一个问题:上传完成后,浏览器将我重定向到“base_url”+文件中定义的 url 模式web.xml。我知道这应该是正常的,因为我在<url-pattern>标签中定义了它。但是,我希望我的 webapp 保留在当前 url 中,我该如何实现呢?

  <servlet-name>uploadServlet</servlet-name>
    <servlet-class>com.premium.server.FileUploadServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>uploadServlet</servlet-name>
    <url-pattern>/Project/upload</url-pattern>
  </servlet-mapping>

注意:我已经尝试过这个<url-pattern>/</url-pattern>和这个<url-pattern>/*</url-pattern>但没有奏效。

private static final String UPLOAD_ACTION_URL = GWT.getModuleBaseURL() + "upload";

public void onModuleLoad() {
    final DynamicForm form = new DynamicForm();
    form.setAction(UPLOAD_ACTION_URL);

    form.setEncoding(Encoding.MULTIPART);
    form.setMethod(FormMethod.POST);

    SubmitItem submit = new SubmitItem("a", "Submit");
    submit.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            form.submitForm();
        }
    });
    UploadItem upload = new UploadItem();
    upload.setName("uploadFormElement");
    form.setFields(upload, submit);

    VLayout panel = new VLayout();
    panel.addMember(form);

    RootPanel.get().add(form);
4

1 回答 1

2

根据 SmartGWT 的文档,这是预期的行为:

不使用 Smart GWT 服务器上传

如果在上传完成后应用程序将重新加载整个页面是可以接受的,您可以简单地:

  • 将编码设置为“多部分”
  • 包含 UploadItem 以获取基本的 HTML 上传控件
  • 将操作设置为您已部署服务器端代码以处理上传的 URL
  • 调用 DynamicForm.submitForm 以提交表单

这会导致 DynamicForm 组件像普通 HTML 元素一样提交到 form.action URL。有许多在线教程解释了如何在各种服务器端技术中处理 HTML 表单文件上传。

请注意,当您 submitForm() 时,将发送到您的 actionURL 的唯一值是实际存在 FormItem 的值。这与 saveData() 不同,其中始终发送整个表单值集。要处理提交额外的值,请使用 HiddenItems。

有关详细信息,请参阅 UploadItem 文档。

来源:http ://www.smartclient.com/smartgwtee-latest/javadoc/com/smartgwt/client/docs/Upload.html

您可能正在寻找的是他们所谓的后台上传:

没有 Smart GWT 服务器的后台上传

在不使用 Smart GWT 服务器的情况下也可以实现后台文件上传,但要先进得多。除了上述步骤之外,在页面中创建一个隐藏的 <iframe> 元素,并使用 target 将表单提交定位到这个 IFRAME。为了在上传完成时收到回调通知,在处理文件上传后,您的服务器应输出包含 <SCRIPT> 块的 IFRAME 的 HTML 内容,该块将导航出 IFRAME(通常通过 JavaScript 全局“顶部”)并调用您声明为回调的全局方法。

来源:http ://www.smartclient.com/smartgwtee-latest/javadoc/com/smartgwt/client/docs/Upload.html

注意:FormPanel来自 GWT 的小部件默认后台上传。

于 2013-09-06T15:25:06.680 回答