如何将自定义类属性设置为自定义操作?

问题描述:

今天我想创建一个自定义安装操作,其中包含我的自定义类的实例作为属性。自定义类由install4j的Set Varaible操作实例化,因此它也设置为安装上下文。现在我想将这个实例传递给一个自定义动作。因此我实施了getter()setter()方法并创建了相应的ActionBeanInfo类的动作。如果我将IDE中的操作放入我的项目配置中,则无法为自定义类的配置字段设置任何值。也许我必须为我的自定义类实现某种类型的PropertyConverter类?我看过示例代码,但没有找到任何解决方案。那么我如何才能完成这项工作?如何将自定义类属性设置为自定义操作?

AbstractInstallAction实现:

public class MyCustomAction extends AbstractInstallAction { 

    private MyCustomClass instance; 

    @Override 
    public boolean install(InstallerContext installerContext) throws UserCanceledException { 
    ... 
    // do some stuff with the MyCustomClass instance 
    ... 
    } 

    public MyCustomClass getMyCustomClass() { 
    return instance; 
    } 

    public void setMyCustomClass(MyCustomClass instance) { 
    this.instance= instance; 
    } 
} 

ActionBeanInfo实现:

public class MyCustomActionBeanInfo extends ActionBeanInfo { 

    private static final String PROPERTY_CUSTOM_CLASS = "myCustomClass"; 

    public MyCustomActionBeanInfo() { 
    super("Custom Action.", "This action will do some custom stuff.", null, 
      true, false, null, MyCustomAction.class); 

    addPropertyDescriptor(create(PROPERTY_CUSTOM_CLASS, getBeanClass(), "Custom class", 
      "Sets the custom class to do some custom stuff during installation.")); 
    } 
} 

你必须写一个属性转换器,它可以在MyCustomCass实例转换为字符串和可选的字符串一个实例MyCustomClass

您必须实现的接口是com.install4j.api.beaninfo.PropertyConverter。一旦你已经实现了一个属性转换器,你可以这样在BeanInfo类的构造函数中注册它:

setPropertyConverters(new PropertyConverter[] {propertyConverters}); 
+0

是否建议将PropertyConverter直接实现到ActionBean中,清单? – Hardie82

+0

这个bean信息只在设计时才起作用,在那个时候没有安装上下文。在动作bean上实现PropertyConverted是不可能的,因为在bean信息的构造器中没有bean实例。 –

+0

好的,我今天会尝试。对于我的自定义类,它必须是可序列化的才能将其放到安装程序上下文变量中? – Hardie82