在 java class 中将文档设置为全局 属性,不起作用
Setting Document as global property in java class, not working
在我的 Xpages 应用程序中,我有一个 java class,我想在其中将文档设置为全局 属性 并在我的方法中重复使用。 Document 代表一个 Notes 配置文档,我只想执行一次查找。不幸的是,它没有按预期工作。也许有人可以指导我正确的过程?
首先我设置了一个托管 bean:
<managed-bean>
<managed-bean-name>emplDataMining</managed-bean-name>
<managed-bean-class>se.bank.employeeApp.utils.EmployeeDataMining</managed-bean-class>
<managed-bean-scope>view</managed-bean-scope>
</managed-bean>
我的 class 包含几个方法,它们将转到不同的系统。系统的所有 URL 都存储在一个 Notes 配置文档中,我只想加载一次并在这些方法中重复使用
public class EmployeeDataMining implements Serializable{
private static final long serialVersionUID = 1L;
private Document configuration;
//constructor class. not so very special, so I wont post it
public void getConfiguration(){
//setting up database and view
//only 1 document stored in the view so I can hard-code the reference
configuration = vw.getDocumentByKey("ConfigDocument", true);
//... rest of code e.g. setting up httpclient, JSONobj
}
public void collectDataFromSystemX(CloseableHttpClient httpclient, Employee employee, JSONObject JSONobj){
//I wont post all of my code
HttpPost httpPost = new HttpPost(this.configuration.getItemValueString("urlSystemX"));
//this.configuration is null :-?
//..rest of code
}
public void collectDataFromSystemY(CloseableHttpClient httpclient, Employee employee, JSONObject JSONobj){
//I wont post all of my code
HttpPost httpPost = new HttpPost(this.configuration.getItemValueString("urlSystemY"));
//this.configuration is null :-?
//..rest of code
}
}
我的代码是从 SSJS 启动的:
emplDataMining.getConfiguration();
emplDataMining.collectDataFromSystemX(//passing in the variables which are setup in getConfiguration method)
所以我主要担心的是配置文档没有正确设置或在方法之间交换。
谁能告诉我我忽略了什么?
有 2 个问题:
- 在视图范围内,bean 会为您打开的每个文档重新加载。如果它是一个你想使用会话范围的配置文件
- 您不能将 Notes 对象存储在托管 bean 中(请求范围可能有效)。您的做法是:在 bean 的构造函数中,加载文档并将字段值提取到 bean 内部变量(字符串、列表等)中。那会给你你想要的
在我的 Xpages 应用程序中,我有一个 java class,我想在其中将文档设置为全局 属性 并在我的方法中重复使用。 Document 代表一个 Notes 配置文档,我只想执行一次查找。不幸的是,它没有按预期工作。也许有人可以指导我正确的过程?
首先我设置了一个托管 bean:
<managed-bean>
<managed-bean-name>emplDataMining</managed-bean-name>
<managed-bean-class>se.bank.employeeApp.utils.EmployeeDataMining</managed-bean-class>
<managed-bean-scope>view</managed-bean-scope>
</managed-bean>
我的 class 包含几个方法,它们将转到不同的系统。系统的所有 URL 都存储在一个 Notes 配置文档中,我只想加载一次并在这些方法中重复使用
public class EmployeeDataMining implements Serializable{
private static final long serialVersionUID = 1L;
private Document configuration;
//constructor class. not so very special, so I wont post it
public void getConfiguration(){
//setting up database and view
//only 1 document stored in the view so I can hard-code the reference
configuration = vw.getDocumentByKey("ConfigDocument", true);
//... rest of code e.g. setting up httpclient, JSONobj
}
public void collectDataFromSystemX(CloseableHttpClient httpclient, Employee employee, JSONObject JSONobj){
//I wont post all of my code
HttpPost httpPost = new HttpPost(this.configuration.getItemValueString("urlSystemX"));
//this.configuration is null :-?
//..rest of code
}
public void collectDataFromSystemY(CloseableHttpClient httpclient, Employee employee, JSONObject JSONobj){
//I wont post all of my code
HttpPost httpPost = new HttpPost(this.configuration.getItemValueString("urlSystemY"));
//this.configuration is null :-?
//..rest of code
}
}
我的代码是从 SSJS 启动的:
emplDataMining.getConfiguration();
emplDataMining.collectDataFromSystemX(//passing in the variables which are setup in getConfiguration method)
所以我主要担心的是配置文档没有正确设置或在方法之间交换。
谁能告诉我我忽略了什么?
有 2 个问题:
- 在视图范围内,bean 会为您打开的每个文档重新加载。如果它是一个你想使用会话范围的配置文件
- 您不能将 Notes 对象存储在托管 bean 中(请求范围可能有效)。您的做法是:在 bean 的构造函数中,加载文档并将字段值提取到 bean 内部变量(字符串、列表等)中。那会给你你想要的