【问题标题】:Request update of component with ajax from LazyDataModel.load?从 LazyDataModel.load 请求使用 ajax 更新组件?
【发布时间】:2013-05-24 20:52:57
【问题描述】:

我使用的是 PrimeFaces 3.5 版。

我想实现一条消息,通知 DataTable 中的过滤器返回太多行,只显示前 50 行。

我尝试使用 Messages 和 outputText 来实现。我将文本设置为显示并请求更新:

RequestContext context = RequestContext.getCurrentInstance(); 
context.update("form:message");
context.update("form:text");
message = "Too many rows";

组件:

<p:message id="message" for="message"/>
<h:outputText id="text" value="#{userPicker.model.message}"/>

但是,我在部分请求响应中没有看到正确的更新部分。是否可以从 LazyDataModel.load 函数中请求更新组件(如果,我在这里做错了什么)?如果不可能(为什么?)我还能如何从 DataTable 过滤中强制刷新元素?

【问题讨论】:

  • 您在组件生命周期的哪个阶段尝试这样做?
  • 它在 LazyDataMode.load() 方法中。它是由 PrimeFaces 内部调用的,所以我不确定它是什么生命周期。
  • 在组件的任何页面生命周期&lt;f:event/&gt; 位置,postAddToView 可能会更安全地执行此操作
  • 好吧,p:dataTable 的过滤是一个非常独立的机制,但是它不是很容易扩展,例如它不支持过滤器存储/恢复,这个问题主要是针对那些非常了解的人以及 PrimeFaces 的内部结构,因为有非常具体的事情在发挥作用。我看到组件渲染调用了 load(),所以我认为这是一个请求额外渲染的阶段为时已晚?

标签: jsf jsf-2 primefaces


【解决方案1】:

LazyDataModelload 方法在渲染阶段被调用,此时添加其他组件来更新已经来不及了。

但是,可以添加 JavaScript 执行命令:

context.execute("show_message()");

Where函数show_message将在客户端显示消息,从而可以通过单个请求完成任务。

【讨论】:

  • 你能给我们看一个你的short_message()函数的例子吗?它是否使用p:message 的 widgetVar 属性来更新组件?还有你把context.execute() 命令放在哪里:load 方法的末尾?
  • @jimmybondy 这个地方没关系,因为它将javascript放入集合中,在方法加载后处理。该方法设置了包含消息的span的显示属性,所以它很简单,根本没有PrimeFaces的东西。
  • 谢谢。对我来说很好。
猜你喜欢
  • 2017-09-18
  • 1970-01-01
  • 2013-05-12
  • 2015-02-11
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
相关资源
最近更新 更多