我想通过faces-config文件在我的java类中设置一个属性:
<managed-bean>
<managed-bean-name>utilsBean</managed-bean-name>
<managed-bean-class>org.acme.bank.app.UtilsBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>filePath</property-name>
<value>#{javascript:@ReplaceSubstring(@LeftBack(database.getFilePath(),"\\"),"\\","/")+"/"}</value>
</managed-property>
</managed-bean>
在我的UtilsBean类上,我具有属性:
public String filePath;
和
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
但是当我在构造函数中输出值时,我得到一个空值。
public UtilsBean() throws Exception {
super();
Database database = ExtLibUtil.getCurrentDatabase();
System.out.println("database.getFilePath() = " + database.getFilePath());//returns filepath of current nsf
System.out.println("this filepath = " + this.filePath);//returns null
try {
...
}
}
在我看来,该属性未通过faces-config设置,还是我做错了方法?
答案 0 :(得分:1)
在XPages中通过Java进行开发的过程中,我得出的结论是,延迟加载会更好。与SSJS相比,它也是最大的优势之一,因为它在Java中要容易得多。像这样:
private String filePath;
public void getFilePath() {
if (null == filePath) {
setFilePath();
}
return filePath;
}
public void setFilePath() {
filePath = getFilePathVariableInSomeWay();
}
这意味着您仅在使用设置代码时调用一次设置代码,而不是在实例化对象时调用一次。
它还避免调用性能不佳的SSJS。这也意味着您可以调试设置代码。这也意味着您正在使用具有特定语言的编辑器以及相关的编译验证来生成设置代码。 XML无法验证SSJS。 Java编辑器可以确保您没有任何编译时错误。
我不确定使用faces-config来计算托管bean属性的好处,老实说,我从未使用过它们。但是我可以看到在Java类本身中使用方法的强大优势,无论是在构造函数中还是在getter中。