在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框架的适当注释)