【问题标题】:richfaces sending data to the server using ajaxRichfaces 使用 ajax 向服务器发送数据
【发布时间】:2011-09-17 03:05:14
【问题描述】:

我的应用程序允许用户在消息字段中键入文本,并且当他键入时,它必须允许管理员在不同的控制台中查看正在键入的内容。

为此 我需要定期将数据发送到托管 bean 并从那里发送到业务层。

      <h:form>
          Name : <h:inputText id="name" value="#{clockBean.name}"/>
          Message: <h:inputText id="age" value="#{clockBean.msg}"/>
          <a4j:poll id="poll" interval="20000" enabled="#{clockBean.enabled}" action="#
           {clockBean.process}" render="clock,counter"/>
          <a4j:log/>        
      </h:form>

我有 name 和 msg 的 managedBean 属性,我需要访问 name 和 msg 属性并在处理它们时将它们发送到业务层 clockBean 托管 Bean 的 process() 方法。

@ManagedBean 
@ViewScoped 

public class ClockBean implements Serializable{ 

private string msg; 
private string name; 
private boolean enabled; 

public void process(){ 

System.out.println("timer event calling *** - msg is "+msg+" : name is "+name); } 

//getters setters & rest of the code

目前,我的 bean 范围为 ViewScoped,当轮询每 20 秒运行一次时,我得到 2 个字段的空值。 当轮询在给定的时间间隔内运行时,如何获取 name 和 msg 属性值? 有没有更好的方法来解决这个问题?

【问题讨论】:

    标签: jquery ajax jsf jsf-2 richfaces


    【解决方案1】:

    会话范围仅对当前用户可见。因此,如果您尝试在管理员页面中获取#{clockBean},您实际上最终会得到一个全新的 bean。为了使管理员用户也可以使用此信息,您需要保留并阅读此信息。

    更新: 我不会用轮询来做,因为即使数据没有改变,轮询每次都会发出请求。我会使用 onchange 事件、队列和请求延迟来实现。如果a4j:poll 没有提交表单(可能是richfaces 中的错误?),您可以使用a4j:function 轻松实现这一点,只需创建一个js 函数并使用js 中的setInterval() 调用它。

    【讨论】:

    • 是的,我将保留它们。我真正的问题是如何通过 managedBean 定期向业务层发送数据。我如何根据 Richfaces 中的轮询功能定期进行 ajax 提交?
    • 我不会使用轮询来执行此操作,因为即使数据没有更改,轮询每次都会发出请求。我会使用 onchange 事件、队列和请求延迟来实现。如果a4j:poll 没有提交表单(可能是richfaces 中的错误?),您可以使用a4j:function 轻松实现这一点,只需创建一个js 函数并从js 中使用setInterval() 调用它。
    • 顺便说一句,我注意到您将binding="#{clockBean.msg}" 作为a4j:poll 的绑定。您可能希望删除它,因为仅在极少数情况下需要绑定,因为某些不明原因需要手动访问组件本身的数据。
    • 是的 bogdan..binding 是错误的.. 我已经从 jSF 标记中删除了我的绑定代码部分。在我的clockBean中,我有 @ManagedBean @ViewScoped public class ClockBean implements Serializable{ private string msg;私有字符串名称;启用私有布尔值; public void process(){ System.out.println("定时器事件调用 *** - msg is "+msg+" : name is "+name); } //getter setter &amp; 其余代码
    【解决方案2】:

    得到了我的问题的答案..我没有添加

     execute="@form" 
    

    我的投票标签的属性..所以与输入字段相关的值没有正确进入请求..所有输入都非常感谢。

    【讨论】:

    • 你的回答对我帮助很大!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 2015-08-31
    • 2019-10-24
    • 2012-11-29
    相关资源
    最近更新 更多