首先,我必须承认这可能是一个相当具体的问题。在JavaServer Faces应用程序中,我希望能够让脚本在服务器端运行,并与用户进行交互。让服务器端的Beanshell脚本在JavaServer Faces环境中与用户交互
为了给你更多的细节,我给你一个我想要做的例子: 在我的应用程序中,用户可以输入数据,而在服务器端有一个脚本可以检查/修改这些数据。我不知道确切的脚本,因为用户可以自定义脚本。总而言之,这是没有问题的,但在脚本中,可以通过问题对话框与用户进行交互。在以下示例中,进一步的脚本执行取决于用户的答案。
...
if(inputData.equals("Something")){
if(askUser("Question?","Some question..."))
{
doSomething();
}
else
{
doSomethingElse();
}
}
...
正如您所见,方法“askUser”必须等待结果才能继续执行脚本。脚本本身是Beanshell脚本,“askUser”方法是由Beanshell解释器调用的Java方法。
我曾想过使用线程和Java同步方法让脚本暂停,但EJB不允许创建线程。尽管如此,我尝试了这种方式,但由于FacesContext在用户创建的线程中不可用,所以失败了。
我希望我可以让我的意图清楚,你有任何想法如何做到这一点......在此先感谢。 :)
你的答案是正确的,我认为,但一个小此言服务器理论上可以通过反向ajax/comet来询问用户“问题”。这在OP的例子中会非常笨拙,但理论上可行;) – 2012-03-06 20:53:33
感谢您的回答。即使在我最初的问题中不清楚,我也很熟悉HTTP和JSF的工作方式。 ;) 我想你说了我的期望......这很可能是不可能的...... @ArjanTijms我有这个想法,但仍然存在停止skript并将问题解答回askUser的问题。 – DarkLink 2012-03-07 08:53:22
@ArjanTijms你当然是对的,但是如果你打算去解决这个问题,那么你可能只需要在服务器和客户端之间打开一个TCP/IP套接字,并且完全忘记HTTP应用协议。当然这没有什么问题,但是你不能在那个时候使用JSF。 – 2012-03-07 11:59:19