JSF: Контроллер, который опирается на другой контроллер? - PullRequest
3 голосов
/ 16 сентября 2011

Я работаю над проектом, в котором у нас есть FooViewController и BarListController.Список Bars теперь должен зависеть от просматриваемого Foo.Так у кого-нибудь есть рекомендации, как это сделать?

Мне не нужен ответ с точки зрения реализации, обязательно, но больше с точки зрения дизайна.То есть:

  • Должен ли FooViewController каким-либо образом сообщать BarListController, что Foo просматривается?
  • Должен ли BarListController спрашивать FooViewController что Foo просматривается?
  • В любом случае, как вы вводите эти вещи друг в друга?(В этой части мне нужна помощь по реализации ;-))

Спасибо за любую помощь!

1 Ответ

5 голосов
/ 16 сентября 2011

По сути, bean-компонент, для которого вы вызываете конкретное действие, должен запрашивать его как аргумент метода или как управляемое свойство.

Итак, если вы используете контейнер с сервлетом 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);
    }

    // ...
}
...