java - 如何通过托管 Bean 在类中设置属性?
问题描述
我想通过 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 设置的,还是我做错了?
解决方案
在我在 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 中。
推荐阅读
- javascript - 从使用 Web 浏览器设置的客户协议处理程序中删除
- azure - Azure 认知服务 API 提供与 Web 版本不同的情绪评分
- git - 如何比较两个不同 git 提交的数据输出
- python - 处理具有可变分隔符和行长的 pandas 数据帧
- python - 使用 Python3 在 Python2 中安装包
- architecture - 事件溯源中是否有接近智能合约的概念?
- c - c: typedef-d enum 可以检查实际值吗?
- struct - Ocaml 结构,就像我们在 C 中所做的那样
- docker - 如何解决“docker build”只需要 1 个参数。错误?
- google-cloud-platform - 内部 TCP 负载平衡器上的目标端口 - Google Cloud