gpt4 book ai didi

jsf - 使用 向外部站点发送 HTTP POST 请求

转载 作者:行者123 更新时间:2023-12-04 18:10:54 27 4
gpt4 key购买 nike

我想使用 <h:form> 向另一台服务器发送 HTTP post 请求成分。

我可以使用 HTML <form> 向外部站点发送 POST 请求组件,但是 <h:form>组件不支持这个。

<form action="http://www.test.ge/get" method="post">
<input type="text" name="name" value="test"/>
<input type="submit" value="CALL"/>
</form>

我怎样才能用 <h:form> 实现这一点?

最佳答案

无法使用 <h:form>提交到另一台服务器。 <h:form>默认提交到当前请求 URL。此外,它会自动添加额外的隐藏输入字段,例如表单标识符和 JSF View 状态。此外,它会更改由输入字段名称表示的请求参数名称。这一切都会使它不适合将其提交给外部服务器。

只需使用 <form> .您可以在 JSF 页面中完美地使用纯 HTML。

更新 :根据评论,您的实际问题是您不知道如何处理从您发布到的网络服务获得的 zip 文件,并且您实际上是在错误的方向寻找解决方案。

继续使用 JSF <h:form>并使用其常用的客户端 API 提交到网络服务,一旦您获得了 InputStream 风格的 ZIP 文件(请不要将其包装成 Reader,如您的评论所示,zip 文件是二进制内容而不是字符内容),只需通过 ExternalContext#getResponseOutputStream() 将其写入 HTTP 响应主体即可如下:

public void submit() throws IOException {
InputStream zipFile = yourWebServiceClient.submit(someData);
String fileName = "some.zip";

FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext ec = fc.getExternalContext();
ec.responseReset();
ec.setResponseContentType("application/zip");
ec.setResponseHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
OutputStream output = ec.getResponseOutputStream();

try {
byte[] buffer = new byte[1024];
for (int length = 0; (length = zipFile.read(buffer)) > 0;) {
output.write(buffer, 0, length);
}
} finally {
try { output.close(); } catch (IOException ignore) {}
try { zipFile.close(); } catch (IOException ignore) {}
}

fc.responseComplete();
}

也可以看看:
  • How to provide a file download from a JSF backing bean?
  • 关于jsf - 使用 <h :form> 向外部站点发送 HTTP POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14712626/

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