我有一个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
}发布于 2010-02-16 16:35:26
声明您的bean在session作用域中。
如果bean中有其他仅限请求的信息,那么只需创建一个新的请求作用域的bean,并将所有其他内容移动到那里。它是非常清晰的。
发布于 2010-06-17 20:38:39
这不是问题。MediaOutput组件将创建createContent参数中给定的bean。"bean“前缀是一个令人不安的前缀--这只是一个简单的java类,它包含了画图(...)方法。您必须在这个简单的" bean“中获取keepalived bean(例如支持bean)作为ManagedProperty,它也可以包含keepalived信息。
示例:
带有@ManagedBean(name = "ABCBean")和@RequestScoped注释的abc.xhtml和ABC.java。您可以使用ABCBean作为abc.xhtml的支持Bean,但不能在mediaOutput.createContent参数中使用!但是您可以使用@ManagedBean(name="MediaBean")注释创建MediaBean.java,它有一个@ManagedProperty,用于获取MediaBean中的ABCBean实例。并且ABCBean实例是保持活动的。
https://stackoverflow.com/questions/2266973
复制相似问题