Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从java类中的托管bean访问属性值?_Java_Xpages - Fatal编程技术网

如何从java类中的托管bean访问属性值?

如何从java类中的托管bean访问属性值?,java,xpages,Java,Xpages,我的想法是为会话设置一个全局属性,例如“上帝模式”,这样在会话期间,一个人可以看到比平均水平更多的内容(仅用于开发目的),例如 苹果豆 se.corp.app.package.ApplicationBean 一场 上帝模式 真的 java.lang.Boolean 但是如何从另一个java类中访问属性集呢?向ApplicationBean类添加一个getInstance()方法: public static ApplicationBean get() { return (Applic

我的想法是为会话设置一个全局属性,例如“上帝模式”,这样在会话期间,一个人可以看到比平均水平更多的内容(仅用于开发目的),例如


苹果豆
se.corp.app.package.ApplicationBean
一场
上帝模式
真的
java.lang.Boolean
但是如何从另一个java类中访问属性集呢?

向ApplicationBean类添加一个getInstance()方法:

public static ApplicationBean get() {
    return (ApplicationBean) resolveVariable("appBean");
}
public class MyOtherBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private ApplicationBean app;

    public void setApp(ApplicationBean app) {
        this.app = app;
    }

    public void doSomething() {
        // App is already here
        // no need to resolve it
        if (app.isGodMode()) {
            //do something;
        }
    }
}
我正在使用一种实用方法来解析bean变量。此方法是更新的扩展库ExtLibUtil.resolveVariable(名称)的一部分,可在以下位置获得:

public static Object resolveVariable(String variable) {
    return FacesContext.getCurrentInstance().getApplication().getVariableResolver().resolveVariable(FacesContext.getCurrentInstance(), variable);
}
然后可以从另一个类访问bean,如下所示:

ApplicationBean appBean = ApplicationBean.get();
然后,您可以访问ApplicationBean中的所有公共属性和方法。

将getInstance()方法添加到ApplicationBean类中:

public static ApplicationBean get() {
    return (ApplicationBean) resolveVariable("appBean");
}
public class MyOtherBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private ApplicationBean app;

    public void setApp(ApplicationBean app) {
        this.app = app;
    }

    public void doSomething() {
        // App is already here
        // no need to resolve it
        if (app.isGodMode()) {
            //do something;
        }
    }
}
我正在使用一种实用方法来解析bean变量。此方法是更新的扩展库ExtLibUtil.resolveVariable(名称)的一部分,可在以下位置获得:

public static Object resolveVariable(String variable) {
    return FacesContext.getCurrentInstance().getApplication().getVariableResolver().resolveVariable(FacesContext.getCurrentInstance(), variable);
}
然后可以从另一个类访问bean,如下所示:

ApplicationBean appBean = ApplicationBean.get();

然后,您可以访问ApplicationBean中的所有公共属性和方法。

所有托管bean、dataContext、datasources等都分配了一个引用,该引用可用于托管bean等的生命周期。因此,如果在XPage中定义了变量名为“myXPageDocument”的
dominoDocument
,则可以使用该引用整个XPage中的“myXPageDocument”标识符,或插入XPage中的任何自定义控件或从XPage调用的代码,以访问它。(如果使用相同的变量名,则可能只获得“最近的”一个。)对于托管bean也是如此。如果您有一个viewScoped bean,那么您可以在XPage上的任何位置、插入XPage的自定义控件或从XPage调用的代码中访问它


要访问其中任何一个,只需将变量名传递给
ExtLibUtil.resolve(appBean)
。我认为,由于ExtLib 9.0.1 v15或Domino 9.0.1 FP8,它可以只接受一个参数,即变量名。这将调用VariableResolver,它访问所有隐式对象(bean、
会话
,等等)和作用域,直到找到具有传入变量名的内容。

所有托管bean、dataContext、数据源等都分配了一个引用,该引用可用于托管bean等的生命周期。因此,如果在XPage中定义了变量名为“myXPageDocument”的
dominoDocument
,则可以使用该“myXPageDocument”整个XPage中的标识符,或插入XPage的任何自定义控件,或从XPage调用的代码,以访问它。(如果使用相同的变量名,您可能只会得到“最近的”一个。)托管bean也是如此。如果您有一个viewScoped bean,则可以在XPage上的任何位置或插入XPage的自定义控件或从XPage调用的代码中访问它


要访问其中任何一个,只需将变量名传递给
ExtLibUtil.resolve(appBean)
。我认为,由于extlib9.0.1v15或domino9.0.1fp8,它只需要一个参数,变量名。这将调用variablesolver,它访问所有隐式对象(bean、
会话
等)和作用域,直到找到带有传入变量名的内容。

我对您的问题的解释与Per和Paul不同(Hi Per,Hi Paul,好久不见!)我认为您希望能够访问XPage中的托管Bean

在表达式语言的帮助下,您可以访问托管bean的任何属性。IBM提供的文档很少,但它非常棒,可以帮助您将代码保持在应该的位置,即Java类中。以下是表达式语言的文档:

一旦在faces配置中配置了托管bean

<managed-bean>
<managed-bean-name>TableOfContents</managed-bean-name>
<managed-bean-class>ch.magerman.zhpedia.tableofcontents.TableOfContents</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
要访问它,您需要删除'get'前缀并将大写字母R更改为小写字母R


我希望这有帮助

我对您的问题的解释与Per和Paul不同(嗨Per,嗨Paul,好久不见!),我认为您希望能够在XPage中访问托管Bean

在表达式语言的帮助下,您可以访问托管bean的任何属性。IBM提供的文档很少,但它非常棒,可以帮助您将代码保持在应该的位置,即Java类中。以下是表达式语言的文档:

一旦在faces配置中配置了托管bean

<managed-bean>
<managed-bean-name>TableOfContents</managed-bean-name>
<managed-bean-class>ch.magerman.zhpedia.tableofcontents.TableOfContents</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
要访问它,您需要删除'get'前缀并将大写字母R更改为小写字母R


我希望这有帮助

关于这一点,您可以采取两种方法:一种简单,另一种更符合一般JSF理念。换句话说,这是一个个人诚信的问题,以技术原则:D

最简单的一个例子是Per Henrik Lausten的插图。然而,它在某种程度上是有缺陷的。它不是真正的环境中立/不可知论。这并不意味着这是一个问题,但是如果你想重新分发你的bean,你就必须,而且必须,你的实现者,按照你选择的bean名称来命名-例如,appBean

现在我不想让事情过于复杂,但更灵活的方法是:

 <managed-bean>
      <managed-bean-name>appBean</managed-bean-name>
      <managed-bean-class>bean.ApplicationBean</managed-bean-class>
      <managed-bean-scope>session</managed-bean-scope>
      <managed-property>
           <property-name>name</property-name>
           <value>appBean</value>
      </managed-property>
 </managed-bean>
使用上述方法,bean可以部署到任何地方,如果需要,您可以定义不同的名称-
托管bean名称
,并且属性值必须匹配。否则,在设置
managedbeanname
时,将忽略faces-config.xml中的name属性,与
DEFAULT\u name
java类属性中显示的完全相同

相反,“哲学”的方法是利用属性注入。这完全取决于您发现自己在所有bean中需要特定bean的频率。但请先看一个例子:

 <managed-bean>
      <managed-bean-name>appBean</managed-bean-name>
      <managed-bean-class>bean.ApplicationBean</managed-bean-class>
      <managed-bean-scope>session</managed-bean-scope>
      <managed-property>
           <property-name>godMode</property-name>
           <value>true</value>
                <property-class>java.lang.Boolean</property-class>
      </managed-property>
 </managed-bean>

 <managed-bean>
      <managed-bean-name>myOtherBean</managed-bean-name>
      <managed-bean-class>bean.MyOtherBean</managed-bean-class>
      <managed-bean-scope>view</managed-bean-scope>
      <managed-property>
           <property-name>app</property-name>
           <value>#{appBean}</value>
      </managed-property>
 </managed-bean>
我个人使用这两种方法,尽管我更喜欢最后一种方法。不过有一个陷阱:您只能注入共享相同数据的bean