Доступ к 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.
Есть два простых решения:
ExtLibUtil.resolveVariable()
позволяет получить к нему доступ по имени переменной, объявленному в face-config, поэтомуappProps
, ExtLib 14 позволяет просто передать имя.Добавить статический
get()
метод в бобе, который используетExtLibUtil.resolveVariable()
, Вы можете позвонитьApplicationMap.get()