gpt4 book ai didi

java - 以编程方式将文件上传到 JSF Web 应用程序

转载 作者:行者123 更新时间:2023-11-28 23:49:30 25 4
gpt4 key购买 nike

我在 Tomcat 7.0.25 上有一个 JSF 2.0/primefaces 网络应用程序。该应用程序有一个简单的文件上传表单,如 primefaces showcase 中所示。 .

<h:form enctype="multipart/form-data">
<p:messages showDetail="true" />
<p:fileUpload value="#{fileUploadController.file}" mode="simple" />
<p:commandButton value="Submit" ajax="false" actionListener="#{fileUploadController.upload}" />
</h:form>
public void upload() throws IOException {
FacesMessage msg = new FacesMessage("Succesful", this.file.getFileName() + " is uploaded.");
FacesContext.getCurrentInstance().addMessage(null, msg);
// do stuff with xml
}

我正在尝试使用 stndalone java 客户端向上传表单发出 multipart/form-data POST 请求。Sinc 现在我试过了 thisthis但没有成功。

在这两种情况下,我都收到了 HTTP/1.1 200 OK 响应,并且我收到了表单页面,就像没有发送 POST 一样。

有什么想法吗?

最佳答案

当以编程方式向 JSF 网络应用程序提交表单时,您需要确保考虑以下 3 件事:

  • 维护 HTTP session (如果 JSF webapp 打开了服务器端状态保存)。
  • 发送 javax.faces.ViewState 隐藏输入字段的名称-值对。
  • 发送实际要按下的提交按钮的名称-值对。

关于维护 HTTP session ,当使用 URLConnection 时,在第一个 URLConnection 创建之前添加以下行。

CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));

或者在使用 HttpClient 时,使用以下内容:

HttpContext httpContext = new BasicHttpContext();
httpContext.setAttribute(ClientContext.COOKIE_STORE, new BasicCookieStore());
// ...
HttpResponse getResponse = httpClient.execute(someHttpMethod, httpContext);

发送 javax.faces.ViewState 隐藏输入字段的名称=值对是强制性的,以保持 JSF View 状态处于 Activity 状态。为了让 JSF 调用操作,必须发送提交按钮的名称=值对。如果它没有自动生成的客户端 ID,这是最简单的,因此请为其及其父表单提供一个固定 ID。

另见:

关于java - 以编程方式将文件上传到 JSF Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10760342/

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