Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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
Xpages、faces-config、托管bean和作用域变量_Xpages - Fatal编程技术网

Xpages、faces-config、托管bean和作用域变量

Xpages、faces-config、托管bean和作用域变量,xpages,Xpages,我的数据库中有一些属性很少会改变,但在整个数据库中都被广泛使用。这似乎是我可以用托管bean做的事情 <managed-bean> <managed-bean-name>bu</managed-bean-name> <managed-bean-class> </managed-bean-class> <managed-bean-scope>application</managed-bean-scope> &

我的数据库中有一些属性很少会改变,但在整个数据库中都被广泛使用。这似乎是我可以用托管bean做的事情

<managed-bean>
<managed-bean-name>bu</managed-bean-name>
<managed-bean-class>    </managed-bean-class>
<managed-bean-scope>application</managed-bean-scope> </managed-bean>

日分
应用
我希望在applicationScope.bu中得到一个值列表


我是否只编写一个简单的java实现?有更简单或更好的方法吗?

如果我正确理解了您的问题,我认为托管bean的属性不会是您希望存储应用程序属性的地方


我会把它们放在应用程序的登录页上的应用程序范围内

要正确实现托管bean,您的faces配置应该包括一个与您输入的块类似的块,但您缺少该值。这是将在内存中创建的类(在您的情况下是applicationScope)。如果您的bean类有方法返回您要查找的值,那么就很好了。我是bean(managed或POJO)的粉丝,在一些应用程序中使用这种方法

[编辑] 正如Steve在他的回答中指出的,您对配置的可访问性和数量的需求可能会驱动您存储这些值的方式。您与它们的接口方式可能不同,我非常倾向于托管bean的使用

对于需要为给定应用程序存储的少量值,我喜欢在XSP属性中设置这些值,然后可以通过
XSPContext.getProperty('XSP.property.name')引用这些值

对于更复杂的事情,我倾向于创建一个配置文档,我使用它类似于配置文件文档,然后将其从/存储加载到值中。 [/编辑]

如果您正在寻找一个开始使用托管bean的好地方,或者寻找一个进行健全性检查的快速参考,我会推荐您

简短的版本是,要拥有托管bean,您必须具备:

  • Java类
    • 使用私有属性(值)构建
    • 它们由公共getter/setter方法公开
    • 实现可序列化(java.io.Serializable)
    • 包含一个无参数的构造函数(第一次构建时不得使用任何参数;这并不意味着它无法在其他地方找到值)
  • faces配置中的一个条目(很像您概述的)
  • 绑定通过
    • EL与
      #{beanName.propertyName}
      (EL使用驼峰大小写的属性名进行转换,因此
      getPropertyName()
      的getter方法在EL中表示,如图所示
    • 带有
      {javascript:return beanName.getPropertyName()}
      (完整方法调用)的SSJS
  • 然后,您可以在表达式语言或SSJS块中使用托管bean的名称(在本例中为“bu”)。在EL绑定中,请注意属性使用驼峰大小写进行访问;因此,myProperty的属性由getMyProperty公开,但看起来像
    {bu.myProperty}
    。您也可以在SSJS中使用它,使用完整的方法名,例如
    {javascript:return bu.getMyProperty();}


    例子 这里有一个是针对数据对象的。它在viewScope中,因此它与给定XPage的生命周期保持一致

    
    哥特豪斯
    看法
    com.westeros.model.HouseModel
    
    *作为一个例子,为了简洁起见,我在这里对其进行了修改

    package com.westeros.model;
    //...
    公共类HouseModel实现了可序列化{
    私有静态最终长serialVersionUID=1L;
    私有字符串名称;
    //...
    公共房屋模型(){}
    公共空荷载(字符串unid){
    //从医生的UNID上加载一些东西
    }
    公共void集合名(字符串名){
    this.name=名称;
    }
    公共字符串getName(){
    返回此.name;
    }
    //...
    }
    
    *节选以简短举例


    您可以使用托管bean的托管属性。 比如这个小豆子

    package ch.hasselba.xpages;
    
    import java.io.Serializable;
    
    @SuppressWarnings("serial")
    public class MyBean implements Serializable {
    
        private String dbName;
    
        public void setDbName(String dbName) {
            this.dbName = dbName;
        }
    
        public String getDbName() {
            return dbName;
        }
    
    }
    
    …可以在faces-config.xml中初始化

    
    蚕豆
    ch.hasselba.xpages.MyBean
    应用
    数据库名
    我的名字
    java.lang.String
    
    一旦你访问了这个bean,这个值就是“那里”。例如,你的XPage上有一个标签

    <xp:label
        value="#{myBean.dbName}"
        id="label1">
    </xp:label>
    
    
    
    …然后将显示MyName


    托管属性可以包含其他bean,并访问运行时属性(例如请求参数)这使得它们非常强大。

    我想知道这不是更好。我总是先创建一个被调用的xpHome,然后调用真正的xpPage。我只需要创建一个SSJS类并在那里加载我的应用程序范围变量。我的首选是将特定于应用程序的属性放入XSP属性中,然后使用我的实时配置进行访问进入applicationScope bean。这取决于需要存储多少以及您希望如何使用它。直接使用*范围映射没有什么错,两者都是同等可访问的。@Bryan,除了Eric提到的,学习托管bean的一个很好的资源是Russ Meyer的IBM Connect 2013课程:Stephan Wissel有一个很好的解释在我道歉之前,我应该在发帖前确认,Russ的姓拼写是Maher,而不是Meyer。
    <xp:label
        value="#{myBean.dbName}"
        id="label1">
    </xp:label>