RichFaces使用Ajax向服务器发送数据

4

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

为此,我需要定期向托管的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属性,当我在clockBean managed 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秒运行时,我得到的两个字段的值为null。如何在给定时间间隔内获取名称和消息属性值?是否有更好的方法来解决这个问题?

2个回答

4
会话范围仅对当前用户可见。因此,如果您尝试在管理员页面中获取#{clockBean},实际上会得到一个全新的bean。为了使管理员用户也能够使用这些信息,您需要将其持久化并读取它。
更新: 我不会使用轮询来做这件事,因为即使数据没有改变,轮询也会每次请求。我会使用onchange事件、队列和请求延迟来完成。如果a4j:poll没有提交表单(可能是richfaces的错误?),您可以很容易地使用a4j:function来实现,并创建一个js函数,在js中使用setInterval()调用它。

是的,我打算将它们持久化。我的真正问题是如何通过managedBean定期向业务层发送数据。 我如何基于richfaces中的轮询功能定期执行ajax提交? - Sanath
我不会使用轮询来做这件事,因为轮询即使数据没有改变也会每次请求。我会使用onchange事件、队列和请求延迟来实现。如果a4j:poll不能提交表单(可能是richfaces的bug),你可以很容易地使用a4j:function来实现,只需创建一个js函数并从js中使用setInterval()调用它。 - bogdan.mustiata
顺便提一下,我注意到你的a4j:poll中有一个binding="#{clockBean.msg}"绑定。你可能应该将其删除,因为只有在极少数情况下需要绑定,而且仅在某些模糊原因下需要手动访问组件本身的数据时才需要。 - bogdan.mustiata
是的Bogdan,绑定有误。我已经从JSF标记中删除了我的绑定代码部分。在我的ClockBean中,我有<code> @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); }//获取器设置器和其余代码</code> - Sanath

2

我找到了处理我的问题的方法... 我没有添加

 execute="@form" 

在我的投票标签中添加属性,这样与输入字段相关的值就可以正确地发送请求了。非常感谢所有提供的输入。


你的回答帮了我很多! - Edson Cezar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接