首先,我不得不承认这可能是一个非常具体的问题。在 JavaServer Faces 应用程序中,我希望能够让在服务器端运行的脚本与用户交互。
为了给你更多的细节,我给你一个我想做的例子:在我的应用程序中,用户可以输入数据,而在服务器端有一个脚本可以检查/修改这些数据。我不知道确切的脚本,因为用户可以制作自定义脚本。总而言之到目前为止没有问题,但是在脚本中可以通过问题对话的方式与用户进行交互。在以下示例中,进一步的脚本执行取决于用户的回答。
...
if( inputData.equals("Something") ){
if( askUser("Question?","Some question...") )
{
doSomething();
}
else
{
doSomethingElse();
}
}
...
如您所见,“askUser”方法必须等待结果才能继续脚本。脚本本身是一个 Beanshell 脚本,“askUser”方法是一个 Java 方法,由 Beanshell 解释器调用。
我的想法是使用线程和 Java 同步方法让脚本暂停,但是 EJB 不允许创建线程。我仍然尝试过这种方式,但由于 FacesContext 在用户创建的线程中不可用而失败。
我希望我能清楚地表达我的意图,并且您知道如何做到这一点...在此先感谢。:)