Java 向外部链接提交表单(但在此之前提交本地操作)

Java 向外部链接提交表单(但在此之前提交本地操作),java,jsf,jsf-2,Java,Jsf,Jsf 2,我有一个JSF页面,用户可以在其中向外部链接提交一些数据。然而,在这样做之前,我需要从一个支持bean调用一个本地操作。我怎样才能做到这一点 这是我的表单示例(由于外部链接操作而使用普通HTML): 提交 简言之,这就是我的情况: 点击按钮提交表单 从bean调用本地方法 将表单提交到外部链接 关于如何实现这一点有什么想法吗?我会先在后台通过AJAX提交JSF表单,当响应到达时,我会将您的简单HTML表单提交到外部URL 例如: 函数jsf(数据){ 如果(data.status==“成功

我有一个JSF页面,用户可以在其中向外部链接提交一些数据。然而,在这样做之前,我需要从一个支持bean调用一个本地操作。我怎样才能做到这一点

这是我的表单示例(由于外部链接操作而使用普通HTML):


提交
简言之,这就是我的情况:

  • 点击按钮提交表单
  • 从bean调用本地方法
  • 将表单提交到外部链接

  • 关于如何实现这一点有什么想法吗?

    我会先在后台通过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没有说明如何使用它,我只举了一个基本示例:)。好吧,很遗憾在这种情况下不行,因为这个解决方案是我最喜欢的。我很抱歉没有在问题中提及这一点,并感谢您的快速和良好的反馈。