我的应用程序允许用户在消息字段中键入文本,当他键入时,它必须允许管理员查看在不同控制台中键入的内容。
为了这个我需要定期将数据发送到托管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>
我有名称和消息的managedBean属性,我需要访问名称和消息属性,并在中处理它们时将它们发送到业务层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作用域为ViewScopedan,当每20秒运行一次轮询时,我会得到2个字段的null值。当轮询在给定的时间间隔内运行时,如何获取名称和消息属性值?有没有更好的方法来解决这个问题?
会话范围仅对当前用户可见。因此,如果您试图在管理员的页面中获得#{clockBean}
,那么您最终会得到一个全新的bean。为了让管理员用户也可以使用这些信息,你需要保存这些信息并阅读它
更新:我不会用轮询来做,因为即使数据没有改变,轮询每次都会发出请求。我会使用onchange事件、队列和请求延迟来完成此操作。如果a4j:poll
没有提交表单(可能是richfaces中的bug?),您可以用a4j:function
轻松地实现这一点,只需创建一个js函数并用js中的setInterval()
调用它。
得到了我的问题的答案。。我没有添加
execute="@form"
属性添加到我的投票标记。。因此,与输入字段相关的值没有正确地进入请求中。。所有的投入都得到了高度赞赏。