JSF:依赖另一个控制器的控制器?

时间:2011-09-16 04:02:06

标签: model-view-controller jsf controller dependencies

我正在开展一个项目,我们有一个FooViewController和一个BarListControllerBars列表现在需要依赖于正在查看的Foo。那么有人建议如何做到这一点吗?

从实现的角度来看,我不一定需要答案,但更多的是从设计的角度来看。那就是:

  • FooViewController是否应以某种方式告诉BarListController正在查看Foo的内容?
  • BarListController是否应该询问FooViewController正在查看Foo的内容?
  • 在任何一种情况下,你如何将这些东西注入彼此? (这部分我需要实施帮助;-))

感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

基本上,您调用具体操作的bean应该将其作为方法参数或托管属性。

因此,如果您使用的是支持Servlet 3.0 / EL 2.2的容器,则将Foo作为方法参数传递:

<h:commandLink value="Bar list"
    action="#{barListController.list(fooViewController.foo)}" />

public void list(Foo foo) {
    this.list = barService.list(foo);
}

如果您尚未使用EL 2.2,请将Foo设置为托管属性:

<h:commandLink value="Bar list"
    action="#{barListController.list}" />

@ManagedBean
@ViewScoped
public class BarListController {

    @ManagedProperty("#{fooViewController.foo}")
    private Foo foo;

    public void list() {
        this.list = barService.list(foo);
    }

    // ...
}