我的目标是从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,而不是重新加载页面。
答案 0 :(得分:1)
尝试从动作侦听器方法中删除大括号
而不是#{loginController.printFbInfo()}
使用#{loginController.printFbInfo}
。
由于您使用的是Primefaces,因此可以使用Primefaces RemoteCommand(p:remoteCommand
)来实现此目的。