Передача данных между управляемыми компонентами в JSF - PullRequest
6 голосов
/ 24 января 2010

Возможно ли передавать какие-либо данные между управляемыми компонентами в JSF? Если да, как этого добиться?

Может ли кто-нибудь предоставить образец?

Ответы [ 2 ]

11 голосов
/ 24 января 2010

Есть несколько способов. Если управляемые bean-компоненты связаны друг с другом, самым чистым способом будет внедрение управляемых свойств. Предположим, что Bean1 имеет ту же область видимости или более широкую область, чем Bean2. Сначала дайте Bean2 свойство Bean1:

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

Затем объявите Bean1 в faces-config.xml как управляемое свойство Bean2:

<managed-bean>
    <managed-bean-name>bean1</managed-bean-name>
    <managed-bean-class>com.example.Bean1</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

<managed-bean>
    <managed-bean-name>bean2</managed-bean-name>
    <managed-bean-class>com.example.Bean2</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
        <property-name>bean1</property-name>
        <value>#{bean1}</value>
    </managed-property>
</managed-bean>

Таким образом, экземпляр bean2 получает мгновенный доступ к экземпляру bean1.

Если вы по каким-либо причинам не хотите использовать внедрение управляемого свойства, вы также можете получить Application#evaluateExpressionGet() для доступа к нему программным способом. Вот пример получения Bean1 внутри Bean2:

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

Однако Bean1 уже должен быть объявлен как управляемый bean bean1 в faces-config.xml.

Для получения дополнительной информации и подсказок о передаче данных внутри JSF, вы можете найти эту статью полезной.

4 голосов
/ 24 января 2010

Чтобы добавить к ответу BalusC, если вы используете инфраструктуру внедрения зависимостей (spring, guice и т. Д.), Или если вы используете JSF 2.0, вы можете установить один управляемый компонент в другой, используя просто:

@Inject
private Bean2 bean2;

(или соответствующая аннотация на основе вашей структуры DI)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...