Прежде всего, я должен признать, что это может быть довольно конкретной проблемой. В приложении JavaServer Faces я хочу, чтобы сценарий, выполняемый на стороне сервера, взаимодействовал с пользователем.Пусть серверный скрипт Beanshell взаимодействует с пользователем в среде JavaServer Faces
Чтобы дать вам более подробную информацию, я даю вам пример того, что я хочу сделать: В моем приложении пользователь может вводить данные, а на стороне сервера есть скрипт, который может проверять/изменять эти данные. Я не знаю точного скрипта, потому что пользователь может создать пользовательский. В целом до сих пор нет никаких проблем, но в скрипте можно взаимодействовать с пользователем в вопросе диалога вопросов. В следующем примере дальнейшее выполнение сценария зависит от ответа пользователя.
...
if(inputData.equals("Something")){
if(askUser("Question?","Some question..."))
{
doSomething();
}
else
{
doSomethingElse();
}
}
...
Как вы видите, метод «askUser» должен ждать результата до того, как скрипт сможет продолжить. Сам скрипт - это скрипт Beanshell, а метод «askUser» - это метод Java, который вызывается интерпретатором Beanshell.
Я имел в виду использовать потоки и методы синхронизации Java, чтобы позволить сценарию приостанавливаться, но создание потоков не разрешено EJB. Тем не менее я пробовал этот путь, но он не удалось из-за того, что FacesContext не был доступен в созданных пользователем потоках.
Надеюсь, я смогу сделать свое намерение понятным, и у вас есть представление, как это можно сделать ... Спасибо заранее. :)
Ваш ответ правильный, я думаю, но одно маленькое замечание что сервер теоретически может задать пользователю «вопросы» с помощью обратного ajax/кометы.Это было бы очень неудобно работать на примере OP, но это теоретически возможно;) –
Спасибо за ваш ответ. Даже если это не ясно в моем первоначальном вопросе, я знаком с работой HTTP и JSF. ;) И я думаю, вы сказали, чего я ожидал ... Скорее всего, это невозможно ... @ArjanTijms У меня была эта идея, но тогда есть проблема с остановкой skript и возвратом ответа в askUser. – DarkLink
@ArjanTijms Вы, конечно, правы, но если вы собираетесь пойти на эту проблему, вы можете просто открыть TCP/IP-сокет между сервером и клиентом и полностью забыть протокол HTTP-приложений. Конечно, нет ничего плохого в этом, но вы не можете использовать JSF в этот момент. –