在两个Backing bean方法

时间:2016-03-29 19:50:58

标签: jsf primefaces websocket

我正在编写一个遵循后续步骤的JSF Web应用程序:

  1. 从输入文本中读取数字
  2. 查找旧系统中的号码
  3. 生成消息并将其发送到websocket
  4. 从websocket获取回复
  5. 将结果存储在数据库中
  6. 所有这些步骤必须在一个事件中执行,所有这些任务都在一个支持bean中执行,问题是执行javascript来调用websocket并使用此结果将其保存在数据库中。

    我尝试使用RequestContext.getCurrentInstance().execute("function();");方法,但是这个函数"在ajax请求完成后或在页面加载时执行脚本" 我需要将结果发送到将其存储到数据库中并执行其他操作。

    问题是,我如何以及在哪里处理这些来电?

    注:

    我可以看到以下选项,但我不确定如何实现它们:

    • 在完成下一个任务后,使用Javascript处理调用而不是支持bean:

        来自Javascript的
      1. 调用支持bean方法查看数字并获得响应。
      2. 来自Javascript的
      3. 获取支持bean的结果并将其发送到websocket。
      4. 来自javascript的
      5. 从websocket接收响应,并调用另一个支持bean将结果存储到数据库中。
    • 找到一种在ajax请求完成之前从支持bean调用javascript函数的方法。

    • 在Backing bean中调用WebSocket而不是使用Javascript。

    我希望你能帮助我,谢谢。

    ---- ----- EDIT

    websocket在localhost中运行,这样网页就可以处理本地机器中的设备,所以它必须在Javascript端执行,并且第3个选项是不可能的。

1 个答案:

答案 0 :(得分:0)

选项可能如下:

你的xhtml应该有3种形式:

  1. "用户输入文本/数字表单"
  2. " websocket-Request Form" (隐藏形式/输入)
  3. " websocket response Data Form" (隐藏的形式)
  4. 现在您按照以下步骤操作:

    1. 用户向Bean提交输入(通过ajax或commandActions ...等)
    2. bean-methode读取/验证提交的数据,然后更新表单#2
    3. 中的值
    4. Javascript / Jquery应该监听表单#2 / inputhidden值已更改(然后发送一个wensocket请求)
    5. 收到websocket响应后,更新表单#3中的值并进行自动提交。现在提交此表单会调用bean中的动作方法,将数据保存到数据库。