Java 向外部链接提交表单(但在此之前提交本地操作)
我有一个JSF页面,用户可以在其中向外部链接提交一些数据。然而,在这样做之前,我需要从一个支持bean调用一个本地操作。我怎样才能做到这一点 这是我的表单示例(由于外部链接操作而使用普通HTML):Java 向外部链接提交表单(但在此之前提交本地操作),java,jsf,jsf-2,Java,Jsf,Jsf 2,我有一个JSF页面,用户可以在其中向外部链接提交一些数据。然而,在这样做之前,我需要从一个支持bean调用一个本地操作。我怎样才能做到这一点 这是我的表单示例(由于外部链接操作而使用普通HTML): 提交 简言之,这就是我的情况: 点击按钮提交表单 从bean调用本地方法 将表单提交到外部链接 关于如何实现这一点有什么想法吗?我会先在后台通过AJAX提交JSF表单,当响应到达时,我会将您的简单HTML表单提交到外部URL 例如: 函数jsf(数据){ 如果(data.status==“成功
提交
简言之,这就是我的情况:
关于如何实现这一点有什么想法吗?我会先在后台通过AJAX提交JSF表单,当响应到达时,我会将您的简单HTML表单提交到外部URL 例如:
函数jsf(数据){
如果(data.status==“成功”){
document.getElementById('plain-submit')。单击();
}
}
函数正规(){
getElementById('jsf-submit')。单击();
}
...
...
我会首先在幕后通过AJAX提交JSF表单,当响应到达时,我会将您的普通HTML表单提交到外部URL
例如:
函数jsf(数据){
如果(data.status==“成功”){
document.getElementById('plain-submit')。单击();
}
}
函数正规(){
getElementById('jsf-submit')。单击();
}
...
...
将
更改为
,将其他HTML组件更改为JSF组件,用托管bean绑定它们的值,并让用户提交数据。然后,在您的操作
方法中,您评估数据,然后使用类似于库的方法向您想要/需要的URL发送POST请求
这可能是一个原始示例(基于您的示例)
JSF代码
托管bean代码
@ManagedBean
@RequestScoped
public class Bean {
private String aField;
//constructor, getter and setter...
public void anAction() {
//do your form processing...
HttpRequestHandler httpRequestHandler = new HttpRequestHandler();
httpRequestHandler.handlePost(...); //send the arguments here
}
}
public class HttpRequestHandler {
public void handlePost(String ... parameters) {
//you do the Apache HttpClient POST handling here
//always create a class between your application and your third party libraries
//code adapted from HttpClient examples: http://hc.apache.org/httpcomponents-client-ga/examples.html
HttpClient httpclient = new DefaultHttpClient();
try {
HttpPost httpPost = new HttpPost(...);// your URL goes here
//do as you please with the HttpPost request
} finally {
httpclient.getConnectionManager().shutdown();
}
}
}
如果不想为此作业添加Apache HttpClient库,那么可以使用本地Java类,如URLConnection
,如下所示:将
更改为
,将其他HTML组件更改为JSF组件,将它们的值与托管bean绑定,并让用户提交数据。然后,在您的操作
方法中,您评估数据,然后使用类似于库的方法向您想要/需要的URL发送POST请求
这可能是一个原始示例(基于您的示例)
JSF代码
托管bean代码
@ManagedBean
@RequestScoped
public class Bean {
private String aField;
//constructor, getter and setter...
public void anAction() {
//do your form processing...
HttpRequestHandler httpRequestHandler = new HttpRequestHandler();
httpRequestHandler.handlePost(...); //send the arguments here
}
}
public class HttpRequestHandler {
public void handlePost(String ... parameters) {
//you do the Apache HttpClient POST handling here
//always create a class between your application and your third party libraries
//code adapted from HttpClient examples: http://hc.apache.org/httpcomponents-client-ga/examples.html
HttpClient httpclient = new DefaultHttpClient();
try {
HttpPost httpPost = new HttpPost(...);// your URL goes here
//do as you please with the HttpPost request
} finally {
httpclient.getConnectionManager().shutdown();
}
}
}
如果您不想为此作业添加Apache HttpClient库,那么可以使用本地Java类,如URLConnection
,如下所示:我尝试从我的bean发送HttpPost,但在这种情况下,我似乎没有重定向(外部链接是支付程序)。这种情况只发生在提交表单时,我是对的,还是我遗漏了什么?如果您的浏览器需要在地址中显示外部URL,那么这种方法就不行了(请注意,您应该在问题中说明这一点)。用鼬鼠的方法代替。一个非常好的方法!虽然OP也应该得到响应,并且在它到达后(重新)填充一些字段(我也将其放入代码中)。当然,+1。@skuntsel是的,这可以在HttpRequestHandler
和相关设计中处理,但由于OP没有说明如何使用它,我只举了一个基本示例:)。好吧,很遗憾在这种情况下不行,因为这个解决方案是我最喜欢的。我很抱歉没有在问题中提及这一点,并感谢您的快速和良好的反馈。我尝试从我的bean发送HttpPost,但在这种情况下,我似乎没有重定向(外部链接是一个支付程序)。这种情况只发生在提交表单时,我是对的,还是我遗漏了什么?如果您的浏览器需要在地址中显示外部URL,那么这种方法就不行了(请注意,您应该在问题中说明这一点)。用鼬鼠的方法代替。一个非常好的方法!虽然OP也应该得到响应,并且在它到达后(重新)填充一些字段(我也将其放入代码中)。当然,+1。@skuntsel是的,这可以在HttpRequestHandler
和相关设计中处理,但由于OP没有说明如何使用它,我只举了一个基本示例:)。好吧,很遗憾在这种情况下不行,因为这个解决方案是我最喜欢的。我很抱歉没有在问题中提及这一点,并感谢您的快速和良好的反馈。