You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GWT中FormPanel.SubmitCompleteHandler是否关注setAction指定的Servlet执行结果?

关于GWT FormPanel SubmitCompleteHandler的两个疑问解答

嘿,我来帮你把这两个问题说清楚:

1. SubmitCompleteHandler的“完成”判定是否关注Servlet的执行结果?

答案是:它只关心HTTP请求是否完成,而不直接判断Servlet的业务执行是否成功。

具体来说,只要浏览器从你指定的Servlet收到了HTTP响应(不管响应状态码是200成功,还是500服务器错误、404找不到等),SubmitCompleteHandler就会触发。哪怕你的Servlet的doPost方法抛出了异常,服务器返回了错误响应,这个handler依然会执行。

那怎么判断上传是否真的成功呢?你需要在Servlet里主动返回标识结果的内容,然后在handler里解析响应来判断:

  • 当文件上传逻辑正常执行时,让Servlet返回一段包含成功标记的HTML(比如<span id='status'>success</span>)
  • 如果执行过程中抛出异常,返回错误标记或者直接设置HTTP状态码为500,同时返回错误信息

举个简单的Servlet示例:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    try {
        // 这里是Apache Commons FileUpload的文件处理逻辑
        // ...
        out.write("<html><body><span id='upload-status'>success</span></body></html>");
    } catch (Exception e) {
        response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        out.write("<html><body><span id='upload-status'>failed</span></body></html>");
    }
}

然后在GWT的handler里解析结果:

formPanel.addSubmitCompleteHandler(new SubmitCompleteHandler() {
    @Override
    public void onSubmitComplete(SubmitCompleteEvent event) {
        String responseContent = event.getResults();
        // 简单判断响应里是否包含成功标记
        if (responseContent.contains("success")) {
            Window.alert("上传成功");
        } else {
            Window.alert("上传失败,请检查后重试");
        }
    }
});

2. SubmitCompleteHandler是否会考虑FormPanel.setAction所设置的服务?

当然会!FormPanel.setAction()就是用来指定表单要提交到的目标服务地址(也就是你的那个HttpServlet),SubmitCompleteHandler本质上就是监听这个表单提交操作的完成事件——不管你设置的action是哪个Servlet,只要表单成功提交到该地址并收到响应,handler就会被触发。

换句话说,handler和你设置的action是绑定的,它只会关注这个特定地址的提交请求结果。

内容的提问来源于stack exchange,提问作者E. Rowlands

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:00:33