richfaces keepAlive不工作

时间:2010-02-15 15:34:05

标签: java jsf richfaces ajax4jsf savestate

我有一个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
}

2 个答案:

答案 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 ...