1

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

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

如何使这成为可能?

我检查了是否调用了 init 方法,并且该列表已填写在 init 方法中。

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

支持豆

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
}
4

2 回答 2

2

声明你的 bean 在session范围内。

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

于 2010-02-16T08:35:26.310 回答
0

这不是问题。您不必让 Mediabean 保持活力,也不能。在 createContent 参数中给出的 bean 将由 MediaOutput 组件创建。“bean”前缀是令人不安的——这只是一个包含paint(...) 方法的简单java 类。您必须将这个简单的“bean”中的keepalived bean(例如支持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...

于 2010-06-17T12:38:38.933 回答