Java 如何通过托管Bean在类中设置属性?

Java 如何通过托管Bean在类中设置属性?,java,xpages,Java,Xpages,我想通过faces配置文件在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-b

我想通过faces配置文件在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>

但是当我在构造函数中输出值时,我得到一个空值

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配置设置的,还是我做得不对?

在我通过XPages中的Java进行的过程中,我得出结论,延迟加载更好。这也是与SSJS相比的一大优势,因为它在Java中容易得多。比如:

私有字符串文件路径; 公共无效getFilePath{ 如果null==文件路径{ setFilePath; } 返回文件路径; } 公共void setFilePath{ filePath=GetFilePathVariableInSoway; }

这意味着您只在使用设置代码时调用一次,而不是在实例化对象时调用设置代码

它还避免了调用性能较差的SSJS。这还意味着您可以调试设置代码。这还意味着您正在使用特定于语言的编辑器以及相关的编译验证来生成设置代码。XML无法验证SSJS。Java编辑器可以确保没有任何编译时错误


我不确定使用faces配置计算托管bean属性的好处,老实说,我从未使用过它们。但是我可以看到在Java类本身中使用方法的一些强大优势,无论是在构造函数还是在getter中。

Malin,另一种方法是在构造函数中设置filePath的值,或者在调用getFilePath时读取它,然后删除setFilePath。Hello Per,我在构造函数中通过从属性文件读取值来设置文件路径。但是,我希望计算值。我以为faces配置文件是我能定义的最高级别?通过托管bean,我希望可以通过ssjs和其他java类访问该值。嗨,Malin,但是由于该值是无论如何计算的,所以您可以在构造函数或getterYes中计算它,我看到了,但我想测试托管bean方法:-我个人不想使用托管属性。我认为更改应用程序设计中的设置不是一个好主意。我主要是在应用程序中创建一个配置文档,并从中读取您正在使用的类实例中的值。
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 {
        ...
    }
}