Xpages、faces-config、托管bean和作用域变量
我的数据库中有一些属性很少会改变,但在整个数据库中都被广泛使用。这似乎是我可以用托管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> &
<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>