Richfaces 使用 ajax 向服务器发送数据

Posted

技术标签:

【中文标题】Richfaces 使用 ajax 向服务器发送数据【英文标题】:richfaces sending data to the server using 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 属性值? 有没有更好的方法来解决这个问题?

【问题讨论】:

【参考方案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" 

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

【讨论】:

你的回答对我帮助很大!

以上是关于Richfaces 使用 ajax 向服务器发送数据的主要内容,如果未能解决你的问题,请参考以下文章

带有 Mojarra 2.1.28 和 RichFaces 4.3 的 Internet Explorer Ajax 错误

数据传送与Ajax请求

RichFaces CVE-2018-14667

03AJAX 向服务器发送请求

如何停止 Richfaces 向面板和日历添加边框?

Ajax 向服务器发送请求 | AJAX 教程