2017-03-08 132 views
2

今天我想創建一個自定義安裝操作,其中包含我的自定義類的實例作爲屬性。自定義類由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.")); 
    } 
} 

回答

0

你必須寫一個屬性轉換器,它可以在MyCustomCass實例轉換爲字符串和可選的字符串一個實例MyCustomClass

您必須實現的接口是com.install4j.api.beaninfo.PropertyConverter。一旦你已經實現了一個屬性轉換器,你可以這樣在BeanInfo類的構造函數中註冊它:

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

是否建議將PropertyConverter直接實現到ActionBean中,清單? – Hardie82

+0

這個bean信息只在設計時才起作用,在那個時候沒有安裝上下文。在動作bean上實現PropertyConverted是不可能的,因爲在bean信息的構造器中沒有bean實例。 –

+0

好的,我今天會嘗試。對於我的自定義類,它必須是可序列化的才能將其放到安裝程序上下文變量中? – Hardie82