gpt4 book ai didi

java - 使用 FileUpload 提交表单后,GWT 的 SubmitCompleteEvent 的 getResults() 返回 null

转载 作者:搜寻专家 更新时间:2023-11-01 02:37:22 24 4
gpt4 key购买 nike

在一个应用程序中使用 GWT 成功实现文件上传后,我尝试将其传输到另一个应用程序,但是无法在提供的 SubmitCompleteHandler 中检索从上传 servlet 返回的字符串>。 SubmitCompleteEvent.getResults() 只返回 null。

返回 null 的典型原因似乎是上传 servlet 在不同的域中。但由于 GWT 和上传 servlet 在相同的上下文中运行,因此应该不是跨域问题。

FileUpload 小部件包含在 FormPanel 中。单击按钮时,将提交表单。这将调用一个 servlet(实际上,在调试过程中到达了一个断点)。在现实世界中,它会将文件存储在服务器端并返回文件名。在这个简化的示例中,它只是将一个字符串写入响应 Writer。

FormPanelFileUpload 片段:

final FormPanel form = new FormPanel();
form.setAction("upload"); // results "upload" directly below context
form.setEncoding(FormPanel.ENCODING_MULTIPART);
form.setMethod(FormPanel.METHOD_POST);
VerticalPanel panel = new VerticalPanel();
form.setWidget(panel);
FileUpload upload = new FileUpload();
upload.setName("uploadFormElement");
panel.add(upload);

panel.add(new Button("Submit", new ClickHandler() {
public void onClick(ClickEvent event) {
form.submit();
}
}));
form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
public void onSubmitComplete(SubmitCompleteEvent event) {
Window.alert("===> " + event.getResults() + " <==="); // shows "===> null <==="
}
});

web.xml 片段:

<servlet> 
<servlet-name>FileUploadServlet</servlet-name>
<servlet-class>mypackage.FileUploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FileUploadServlet</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>

FileUploadServlet 片段:

public class FileUploadServlet extends HttpServlet {

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html");
response.getWriter().write("OK");
response.getWriter().flush();
}

}

是否有已知的库或库版本与 GWT 的 SubmitCompleteHandler 冲突?

感谢任何想法......

更新:在将属于 spring-security 的所有工件从 4.0.4.RELEASE 降级到 3.2.4.RELEASE 后,它可以正常工作。将它们升级到 4.1.2.RELEASE 它也不起作用。

最佳答案

此问题与 X-Frame-Options: DENY 有关 header ,spring-security 4.x 附加到响应 [1]。由于 GWT 应用程序通常在 iframe 中加载,因此此 header 无法正确处理来自在框架中执行的客户端代码的表单提交。

要解决问题,应禁用框架选项策略或切换到 SAMEORIGIN .例如。用于 xml 配置到 <s:http> :

<s:headers>
<s:frame-options policy="SAMEORIGIN" />
</s:headers>

或使用 org.springframework.security.config.annotation.web.configurers.HeadersConfigurer.frameOptions() 进行 Java 配置:

 HttpSecurity cfg = ...;
cfg.headers().frameOptions().sameOrigin();

[1] https://docs.spring.io/spring-security/site/docs/current/reference/html/headers.html#headers-frame-options

关于java - 使用 FileUpload 提交表单后,GWT 的 SubmitCompleteEvent 的 getResults() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44670785/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com