【问题标题】:richfaces keepAlive not workingrichfaces keepAlive 不工作
【发布时间】:2010-02-15 15:34:04
【问题描述】:

我有一个 mediaOutput 标记,它在其 createContent 属性中要求支持 bean 处于某种状态。在 init 方法中填充的值列表必须可用。

因此,我为整个支持 bean 添加了一个 keepAlive 标记。我现在确实看到了 backingBean 而不是一些(richfaces)代理 bean,但填充的列表再次为空。

如何做到这一点?

我检查了init方法被调用了,并且列表被填充到了init方法中。

<a4j:keepAlive beanName="myBean" />
<a4j:mediaOutput createContent="#{myBean.writeChart}" ... />

支持 bean

public class MyBean implements Serializable {

public List list;

public void init(ActionEvent event) {
   // call some resource to fill the list
   list = service.getItems();
}

public void writeChart(final OutputStream out, final Object data) throws IOException {
   // list is null
}

// getters & setters
}

【问题讨论】:

    标签: java jsf richfaces ajax4jsf savestate


    【解决方案1】:

    声明你的 bean 在 session 范围内。

    如果您在 bean 中有其他仅请求信息,那么只需创建一个新的请求范围 bean 并将所有其他内容移到那里。清晰易读。

    【讨论】:

    • 也就是说,虽然它有效,但正是我试图阻止的... 支持 bean 包含同一页面的其他内容,不建议将所有内容放在会话范围内。也不为它创建一个单独的bean。这就是引入keepAlive的原因..
    • 是的,但也许 mediaOutput 没有通过常规的 ajax 请求机制,所以这是你唯一的方法。也许你喜欢使用一些对话范围(orchestra、seam)。查看我对另一个 bean 的更新
    • 也许是的 :) 但他们本可以记录这一点 + mediaOutput 标签是 a4j 规范的一部分,奇怪的是它不支持其他 a4j 功能:(
    【解决方案2】:

    这不是问题。您不必让 Mediabean 保持活力,也不能。在 createContent 参数中给出的 bean 将由 MediaOutput 组件创建。 “bean”前缀是令人不安的——这只是一个包含paint(...) 方法的简单java 类。你必须把这个简单的“bean”中的keepalived bean(例如一个backing bean)作为ManagedProperty,它也可以包含keepalived信息。

    例子:

    abc.xhtml 和 ABC.java 带有 @ManagedBean(name = "ABCBean") 和 @RequestScoped 注释。 您使用 ABCBean 作为带有 abc.xhtml 的支持 Bean,但不在 mediaOutput.createContent 参数中!但是您可以使用 @ManagedBean(name="MediaBean") 注释创建 MediaBean.java,它有一个 @ManagedProperty,它可以获取 MediaBean 中的 ABCBean 实例。并且 ABCBean 实例是 keepalived...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-23
      • 2013-08-16
      • 2011-08-21
      • 2015-03-18
      • 1970-01-01
      • 2014-10-30
      • 2011-03-29
      • 1970-01-01
      相关资源
      最近更新 更多