我强烈推荐 Frank van der Linden 在 cmets 中推荐的内容,将其设置为 xsp 属性,您使用的任何属性获取方法/函数都可以轻松引用该属性,并且具有建立数据连接的良好副作用调用很容易在应用程序之间复制/粘贴。
例子:
我有data property name stored as an xsp property,在<app>/WebContent/WEB-INF/xsp.properties:
xsp.local.data=MyApp_data.nsf
我碰巧用a managed bean to perform the app config工作:
<managed-bean>
<managed-bean-name>confBean</managed-bean-name>
<managed-bean-scope>application</managed-bean-scope>
<managed-bean-class>com.myApp.config.AppUtil</managed-bean-class>
</managed-bean>
这意味着我的 AppUtil bean 将属性设置为 db 路径:
ExtLibUtil.getXspContext().getProperty("xsp.local.data", "MyApp_data.nsf")
*注意:第一个参数是属性名称,第二个参数是“默认”(故障转移)值,以防找不到该属性的值
然后,要为您的 xe:restService 提取完整路径,您需要做的就是将值推入,就像这样(假设相同的服务器,示例显示一个 xe: viewJsonService 与默认列):
<?xml version="1.0" encoding="UTF-8"?>
<xp:view
xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xe="http://www.ibm.com/xsp/coreex">
<xe:restService
id="restService1"
pathInfo="data">
<xe:this.service>
<xe:viewJsonService
databaseName="#{confBean.dbAppPath}"
viewName="SomeView"
defaultColumns="true" />
</xe:this.service>
</xe:restService>
</xp:view>
[更新]
正如 Sven Hasselbach 在下面的 cmets 中指出的那样,托管属性将获得大致相同的结果,而无需编辑 xsp 属性文件并保持属性(对于应用程序是显式的)与托管 bean 定义内联。取自他在XPages managed beans and scoped variables 上的回答,下面是 Sven 如何使用托管属性执行相同操作的示例:
在faces-config.xml
<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>
在他的配置 bean 中,它被定义为任何属性(a la POJO),具有私有属性和公共 getter/setter:
//...
private String dbName;
public void setDbName(String dbName) {
this.dbName = dbName;
}
public String getDbName() {
return dbName;
}
//...
可以像任何托管 bean 属性一样使用:
<xp:text
value="#{myBean.dbName}" />
[/更新]