从属性文件中的默认值
为 vatPercentage 设置默认值对用户很方便。您可以使用一个返回固定值的计算器(如 @DefaultValueCalculator),但在这种情况下,更改默认值意味着更改代码。或者,您可以从数据库中读取默认值(从计算器中使用 JPA),但在这种情况下,更改默认值意味着更新数据库表。
另一种选择是将此配置值存储在一个属性文件中,该文件具有"键 = 值"的对。在这种情况下,更改 vatPercentage 的默认值跟编辑文件一样简单。
让我们实现属性文件的选项。在 invoicing/src/main/resources 文件夹中创建一个名为 invoicing.properties 的文件,其中包含以下内容:
defaultVatPercentage=6
尽管可以使用 Java 中的 java.util.Properties 类来读取此文件,但我们更想自定义类来读取这些属性。我们将这类命名为 InvoicingPreferences,并将它放在一个名为 com.yourcompany.invoicing.util 的新包中。以下是此类的代码:
package com.yourcompany.invoicing.util; // 在 'util' 包
import java.io.*;
import java.math.*;
import java.util.*;
import org.apache.commons.logging.*;
import org.openxava.util.*;
public class InvoicingPreferences {
private final static String FILE_PROPERTIES="invoicing.properties";
private static Log log = LogFactory.getLog(InvoicingPreferences.class);
private static Properties properties; // 我们在此保存值
private static Properties getProperties() {
if (properties == null) { // 使用 lazy initialization
PropertiesReader reader = // PropertiesReader 是 OpenXava 的一个实用类
new PropertiesReader( InvoicingPreferences.class, FILE_PROPERTIES);
try {
properties = reader.get();
}
catch (IOException ex) {
log.error( XavaResources.getString( // 读取 i18n 信息
"properties_file_error", FILE_PROPERTIES), ex);
properties = new Properties();
}
}
return properties;
}
public static BigDecimal getDefaultVatPercentage() { // 唯一的公共方法
return new BigDecimal(getProperties().getProperty("defaultVatPercentage"));
}
}
如您所见,InvoicingPreferences 是一个具有一个静态方法 getDefaultVatPercentage() 的类。与直接读取属性文件相比,使用此类的优势在于,如果您更改读取的方式,例如从数据库或 LDAP 目录中读取,仅需更改此类。
在 vatPercentage 属性,您可以从默认计算器中使用此类 。以下有计算器的代码:
package com.yourcompany.invoicing.calculators; // 在 'calculators' 包
import org.openxava.calculators.*; // 將使用 ICalculator
import com.yourcompany.invoicing.util.*; //
將使用
InvoicingPreferences
public class VatPercentageCalculator implements ICalculator {
public Object calculate() throws Exception {
return InvoicingPreferences.getDefaultVatPercentage();
}
}
如您所见,它只是从 InvoicingPreferences 返回 defaultVatPercentage。现在,您可以在 CommercialDocument 中的 vatPercentage 属性定义中使用此计算器,如下:
@DefaultValueCalculator(VatPercentageCalculator.class)
BigDecimal vatPercentage;
使用此代码后,当用户点击创建新发票时,vatPercentage 字段将使用 6 或您在 invoicing.properties 中输入的任何其他值。