我的应用程序允许用户在消息字段中键入文本,当他键入时,它必须允许管理员查看在不同控制台中键入的内容。
为此 我需要定期将数据发送到托管 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 属性值? 有没有更好的方法来解决这个问题?
最佳答案
session 范围仅对当前用户可见。因此,如果您尝试在管理页面中获取#{clockBean}
,您实际上最终会得到一个全新的 bean。为了使管理员用户也可以使用此信息,您需要保留此信息并阅读它。
更新:
我不会用轮询来做到这一点,因为即使数据没有改变,轮询每次都会执行请求。我会用 onchange 事件、队列和请求延迟来做到这一点。如果 a4j:poll
没有提交表单(也许是 richfaces 中的错误?),您可以使用 a4j:function
轻松实现这一点,只需创建一个 js 函数并调用它使用 js 中的 setInterval()
。
关于jquery - richfaces使用ajax向服务器发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6385158/