【问题标题】:Trigger JSF ajax form programmatically via JS通过 JS 以编程方式触发 JSF ajax 表单
【发布时间】:2013-09-17 07:50:37
【问题描述】:

我的目标是从 JS 函数内部调用 JSF 托管 bean 方法。

这是函数:

var fbLogin = function() {
                FB.login( 
                    function(response) {
                        if (response.authResponse) {
                            var access_token =   FB.getAuthResponse()['accessToken'];
                            console.log(access_token);
                            //document.getElementById("hiddenFbForm:hiddenFbToken").value = access_token;
                            //document.getElementById("hiddenFbForm:hiddenFbLoginSubmit").onclick();
                        } else {
                            console.log("ERROR");
                        }
                    }, 
                    {scope:'email'}
                );
            };

我的想法是有一个隐藏的 JSF ajax 表单,填充一个隐藏字段并触发点击提交命令链接:

<h:form id="hiddenFbForm">
            <h:inputHidden id="hiddenFbToken" value="#{loginController.fbToken}" />
            <h:commandLink id="hiddenFbLoginSubmit" actionListener="#{loginController.printFbInfo()}" />
        </h:form>

但是,这不起作用。页面重新加载,我的 printFbInfo 服务器端方法永远无法到达。

对于从 JS 函数调用 JSF 服务器端 bean,您有更好的想法吗(以编程方式,我不希望我的用户单击按钮)。

另一件事...我希望调用是 AJAX,而不是重新加载页面。

【问题讨论】:

  • 你愿意使用 Primefaces 吗??
  • 你为什么不使用如下直接操作:&lt;h:commandLink id="hiddenFbLoginSubmit" action="#{loginController.printFbInfo}" /&gt;
  • 是的,我也在使用 Primefaces。我写了我不想要直接操作,因为 1)我不想要用户点击而是编程点击 2)我想要对我的服务器方法进行 ajax 调用,不重新加载页面

标签: javascript ajax jsf jsf-2


【解决方案1】:

尝试从动作侦听器方法中删除大括号
而不是#{loginController.printFbInfo()} 使用#{loginController.printFbInfo}

由于您使用的是 Primefaces,您可以使用 Primefaces RemoteCommand (p:remoteCommand) 来实现此目的。

【讨论】:

  • Primefaces 远程命令是要走的路。谢谢你。然而,我想知道如果没有 Primefaces 怎么能做到这一点。 :)
猜你喜欢
  • 2016-02-04
  • 1970-01-01
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
相关资源
最近更新 更多