- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在一个应用程序中使用 GWT
成功实现文件上传后,我尝试将其传输到另一个应用程序,但是无法在提供的 SubmitCompleteHandler
中检索从上传 servlet 返回的字符串>。 SubmitCompleteEvent.getResults()
只返回 null。
返回 null 的典型原因似乎是上传 servlet 在不同的域中。但由于 GWT 和上传 servlet 在相同的上下文中运行,因此应该不是跨域问题。
FileUpload
小部件包含在 FormPanel
中。单击按钮时,将提交表单。这将调用一个 servlet(实际上,在调试过程中到达了一个断点)。在现实世界中,它会将文件存储在服务器端并返回文件名。在这个简化的示例中,它只是将一个字符串写入响应 Writer。
FormPanel
和 FileUpload
片段:
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();
关于java - 使用 FileUpload 提交表单后,GWT 的 SubmitCompleteEvent 的 getResults() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44670785/
在一个应用程序中使用 GWT 成功实现文件上传后,我尝试将其传输到另一个应用程序,但是无法在提供的 SubmitCompleteHandler 中检索从上传 servlet 返回的字符串>。 Subm
我是一名优秀的程序员,十分优秀!