从不同的 Java class 访问 Java Bean

accessing a Java Bean from a different Java class

我有一个名为 appProps 的 Java Bean,定义为一个 ApplicationScope,它是一个 Hashmap,类型为 <string, object>。我可以使用

格式通过 SSJS 访问它
var appDesc:String = appProps["some application name"].getAppDesc();

和这个 returns 存储在 Hashmap 对象的字段之一中的应用程序描述。

现在我需要在另一个 JAVA Class.

中调用相同的进程

faces-config中的定义是:

<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>

SSJS 和 EL 为 appProps 执行的隐式查找的最佳 Java 等价物是:

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

有两个简单的解决方案:

  1. ExtLibUtil.resolveVariable()允许你通过faces-config中声明的变量名来访问它,所以appProps。 ExtLib 14 允许您只传递名称。

  2. 在使用ExtLibUtil.resolveVariable()的bean中添加一个静态get()方法。然后你可以调用 ApplicationMap.get()

从不同的 java class

访问 java bean 的另一种(智能)方法

这是你的豆子class:

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);
    }

}

这是一个示例 class 使用您的 bean class:

package ca.wfsystems.core;

public class ApplicationMapClient {

    // Operations

    public void doSomeThing() {

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

    }

}

有关更多信息,请查看 John Dalsgaard 的博客条目 a lesson on scoped managed beans in xpages