Доступ к Java Bean из другого класса Java

У меня есть Java Bean, называемый appProps, определенный как ApplicationScope, который является Hashmap и типа <string, object>, Я могу получить к нему доступ через SSJS, используя формат

var appDesc:String = appProps["some application name"].getAppDesc();

и это возвращает описание приложения, которое хранится в одном из полей объекта Hashmap.

Теперь мне нужно вызвать тот же процесс в другом классе JAVA.

Определение в грани лица:

<managed-bean>
    <managed-bean-name>appProps</managed-bean-name>
    <managed-bean-class>ca.wfsystems.core.ApplicationMap</managed-bean-class>
    <managed-bean-scope>application</managed-bean-scope>
  </managed-bean>

3 ответа

Решение

Лучший Java-эквивалент неявного поиска, который SSJS и EL делают для appProps есть:

ApplicationMap appProps = (ApplicationMap)ExtLibUtil.resolveVariable(FacesContext.getCurrentInstance(), "appProps")

Другой (умный) способ получить доступ к Java-бину из другого Java-класса

Это ваш класс бобов:

package ca.wfsystems.core;

import javax.faces.context.FacesContext;

public class ApplicationMap {

    // Constants

    private static final String BEAN_NAME = "appProps"; //$NON-NLS-1$

    // Operations

    public static ApplicationMap getCurrentInstance() {
        // This is a neat way to get a handle on the instance of this bean in the scope from other Java code...
        FacesContext context = FacesContext.getCurrentInstance(); 
        return (ApplicationMap) context.getApplication().getVariableResolver().resolveVariable(context, BEAN_NAME);
    }

}

И это пример класса, использующего ваш класс bean:

package ca.wfsystems.core;

public class ApplicationMapClient {

    // Operations

    public void doSomeThing() {

        ApplicationMap appMap = ApplicationMap.getCurrentInstance();
        // Your code goes here....

    }

}

Для получения дополнительной информации посмотрите в записи блога урок по управляемым bean-компонентам в xpages от John Dalsgaard.

Есть два простых решения:

  1. ExtLibUtil.resolveVariable() позволяет получить к нему доступ по имени переменной, объявленному в face-config, поэтому appProps, ExtLib 14 позволяет просто передать имя.

  2. Добавить статический get() метод в бобе, который использует ExtLibUtil.resolveVariable(), Вы можете позвонить ApplicationMap.get()

Другие вопросы по тегам