我有一个mediaOutput标记,在其createContent属性中,要求支持bean处于某种状态。必须提供以init方法填充的值列表。
因此,我为整个支持bean添加了一个keepAlive标记。我现在确实看到backingBean代替了一些(richfaces)代理bean,但填充列表再次为null。如何实现这一目标?
我检查过调用了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
}
答案 0 :(得分:2)
声明您的bean位于session
范围内。
如果bean中有其他仅请求信息,那么只需创建一个新的请求范围的bean并将所有其他内容移动到那里。它非常清晰。
答案 1 :(得分:0)
这不是问题。你不必保持Mediabean活着,你不能。 createConutlement参数中给出的bean将由MediaOutput组件创建。 “bean”前缀是令人不安的 - 这只是一个包含paint(...)方法的简单java类。您必须将这个简单的“bean”中的keepalived bean(例如一个支持bean)作为ManagedProperty获取,它也可以包含keepalived信息。
示例:
abc.xhtml和带有@ManagedBean(name =“ABCBean”)的ABC.java和@RequestScoped注释。 您使用ABCBean作为支持Bean与abc.xhtml,但不在mediaOutput.createContent参数中!但是您可以使用@ManagedBean(name =“MediaBean”)注释创建MediaBean.java,它有一个@ManagedProperty,它可以获取MediaBean中的ABCBean实例。并且ABCBean实例是keepalived ...