在JSF中的托管组件之间传递数据

实际上是否可以在JSF中的托管组件之间传递任何数据? 如果是的话,如何实现这一目标?

有人可以提供任何样品吗?

有几种方法。 如果托管bean彼此相关,那么最简单的方法就是管理属性注入。 假设Bean1具有与Bean2相同的范围或更广泛的范围。 首先给Bean2一个Bean1属性:

public class Bean2 { private Bean1 bean1; // +getter +setter. } 

然后将faces-config.xml Bean1声明为Bean2的托管属性:

  bean1 com.example.Bean1 session   bean2 com.example.Bean2 request  bean1 #{bean1}   

这样bean2实例就可以即时访问bean1实例。

如果由于某些原因不想使用托管属性注入,那么您还可以使用Application#evaluateExpressionGet()以编程方式访问它。 这是在Bean2中检索Bean1的示例:

 FacesContext context = FacesContext.getCurrentInstance(); Bean1 bean1 = (Bean1) context.getApplication().evaluateExpressionGet(context, "#{bean1}", Bean1.class); 

但是,Bean1必须已在faces-config.xml声明为托管bean bean1

有关在JSF中传递数据的更多信息和提示,您可能会发现本文很有用。

要添加BalusC的答案,如果您正在使用dependency injection框架(spring,guice等),或者如果使用JSF 2.0,您可以使用以下方法将一个托管bean设置到另一个中:

 @Inject private Bean2 bean2; 

(或基于您的DI框架的适当注释)