我想做的事:
细节:
问题:
是否可以通过中断bean函数来启动javaScript函数?
编辑:
添加了一个示例Bean,了解我如何认为它应该如何工作,如果它有帮助:
public class MyBean {
public String callJavaScriptFunctionAndWaitAndHandleResult() {
// Call a javascript function from the bean
callJavaScriptFunction();
// Waits untill the javascript has returned some stuff
pause(); // <-- IS IT POSSIBLE TO WAIT HERE AND RUN A JAVASCIPT FUNCTION?
// Handle the result you got from the javascript function
handleResultFromJavaScript();
}
}
免责声明:答案中的代码将包含PrimeFaces风格和“伪代码”中未经测试的代码。由于我不使用/运行IceFaces也没有意图,我不能(不会)测试代码,只会提供PrimeFaces对应物作为(未经测试的)示例
您似乎被困在试图获得无法正常工作的技术解决方案。 JSF不能“暂停”事物,只会在调用的bean方法结束时返回数据。您最有可能误导IcesFaces文档中的声明
“立即将Javascript代码发送给客户进行评估和执行”
由于JSF的工作方式,它无法正常工作,而且英语并不是很好。开发人员应该说出类似的东西
“在方法调用结束时将Javascript代码发送给客户端,以便立即进行评估和执行”
直接意味着不是某些<script> .... </script>
被添加到页面中并且可以通过例如一次又一次地执行。调用脚本中定义的函数。这并不意味着你不能从返回的脚本调用现有的javasript函数(已经在你的DOM中的函数)(实际上我们将使用它)
那么如何解决你的问题。首先将方法分解为两个,让我们将它们称为step1和step2
void step1() {
// Do things
// return javascript
}
void step2() {
// Do other things using values that will be posted from the client by javascript
}
如何return javascript/call javascript from a bean是Stackoverflow中现有的Q / A.对于IcesFaces,我会参考他们的文档。 PrimeFaces的例子是
PrimeFaces.current().executeScript("alert('This onload script is added from backing bean.'); clientSideFunction();");
但在javascript结束时你想要call a server side method in a bean from javascript。与第一步中的需求相反。
一个PrimeFaces的例子是
<p:remoteCommand name="clientSideFunction" action="#{bean.step2}" />
因为在调用step2()
你想要pass parameters to the bean,你也需要实现它。
clientSideFunction([{name:'x', value:10}, {name:'y', value:20}]);
你可以在那里使用javascript变量(例如变量中的完整json字符串)并且需要process these variables(特别是在最后看到'update')