我的数据库中有一些属性很少会发生变化,但在整个过程中都会被普遍使用。看来这可能是我可以用托管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实现吗?有更简单或更好的方法吗?
答案 0 :(得分:3)
为了正确实现托管bean,你的faces-config应该包含一个像你一样的块,但你缺少&lt; managed-bean-class&gt;值。这是将在内存中创建的类(在您的情况下, applicationScope )。如果你的bean类有方法可以返回你要查找的值,那么你就是好的。我是bean(托管或POJO)的粉丝,并将这种方法用于一些应用程序。
[编辑] 史蒂夫在他的回答中指出,您对配置的可访问性和数量的需求可能会推动您存储这些值的方式。你如何与他们交流可能会有所不同,我非常倾向于使用托管bean。
对于需要为给定应用程序存储的少量值,我喜欢在XSP属性中设置它们,然后我可以通过XSPContext.getProperty('xsp.property.name');
引用它们。
对于更复杂的事情,我倾向于创建一个配置文档,我使用它类似于配置文件,然后我从/存储到值。 [/编辑]
如果您正在寻找一个开始使用托管bean的好地方,或者提供完整的健全检查参考,我建议checking out Per Henrik Lausten's blog post on the subject。
简短版本是,要拥有托管bean,您必须拥有:
#{beanName.propertyName}
(EL使用驼峰式属性名称进行转换,因此getPropertyName()
的getter方法在EL中标记为首次显示#{javascript:return beanName.getPropertyName()}
的SSJS(完整方法调用然后,您可以在表达式语言或SSJS块中使用托管bean的名称(在您的情况下为#34; bu&#34;)。在EL绑定中,请注意属性使用驼峰外壳进行访问;所以 myProperty 的属性由 getMyProperty 公开,但看起来像#{bu.myProperty}
。您也可以使用完整的方法名称在SSJS中使用它,例如#{javascript:return bu.getMyProperty();}
<小时/> 例 这是我in my demo app的数据对象。它位于 viewScope 中,因此它与给定XPage的生命周期一致。
<?xml version="1.0" encoding="UTF-8"?>
<faces-config>
<managed-bean>
<managed-bean-name>gotHouse</managed-bean-name>
<managed-bean-scope>view</managed-bean-scope>
<managed-bean-class>com.westeros.model.HouseModel</managed-bean-class>
</managed-bean>
<!--AUTOGEN-START-BUILDER: Automatically generated by IBM Domino Designer. Do not modify.-->
<!--AUTOGEN-END-BUILDER: End of automatically generated section-->
</faces-config>
HouseModel.java *为简洁起见,我在此对其进行了修改。
package com.westeros.model;
//...
public class HouseModel implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
//...
public HouseModel(){}
public void load(String unid){
// do some load things from the doc's UNID
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
//...
}
house.xsp (House XPage) *摘录为简洁示例
<?xml version="1.0" encoding="UTF-8"?>
<xp:view
xmlns:xp="http://www.ibm.com/xsp/core">
<!-- truncating -->
<div
class="form-group">
<xp:label
for="name"
value="Name" />
<xp:inputText
id="name"
value="#{gotHouse.name}" />
</div>
<!-- truncating -->
</xp:view>
答案 1 :(得分:2)
如果我正确理解您的问题,我不认为托管bean的属性是您希望存储应用程序属性的位置。
我只是将它们放在应用程序登录页面的应用程序范围内。
答案 2 :(得分:2)
您可以使用托管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
中初始化<?xml version="1.0" encoding="UTF-8"?>
<faces-config>
<managed-bean>
<managed-bean-name>myBean</managed-bean-name>
<managed-bean-class>ch.hasselba.xpages.MyBean</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
<managed-property>
<property-name>dbName</property-name>
<value>MyName</value>
<property-class>java.lang.String</property-class>
</managed-property>
</managed-bean>
</faces-config>
一旦你接受了bean,值就是&#34;那里&#34;。 F.E. XPage上的标签......
<xp:label
value="#{myBean.dbName}"
id="label1">
</xp:label>
...然后将显示 MyName 。
托管属性可以包含其他bean,并访问运行时属性(例如请求参数),这使得它们极其强大。