IzPackドキュメントのユースケースに従ってProcessPanelを使用してJavaクラスを実行すると、onSuccess要素とonFail要素から目的の動作を実現するのが困難になり、IzPack4.3.5に精通している人からの説明を使用できます。
Javaクラスのrunメソッドが呼び出された後、プロセスパネルの次のボタンと前のボタンの可用性を制御するために使用するJava条件process.panel.conditionを定義しました。このrunメソッドは、process.panel.condition条件の基礎となる静的フィールドConditionBooleanにtrueまたはfalseを割り当てます。
私の期待は、process.panel.conditionがtrueの場合、前のボタンを無効にし、次のボタンを有効にすることです。process.panel.conditionがfalseの場合、補完を発生させたいのですが、前が有効になり、次が無効になります。
代わりに、前のボタンの割り当ては機能しているが、次のボタンは常に有効になっているように見えます。
なぜ私がこの行動を見ているのか、そして私の望ましい行動を達成するために私のアプローチをどのように変えるべきかを誰かが指摘できますか?
以下は、executeclass要素で参照されるxml定義と関連するJavaクラスです。
<conditions>
<condition type="java" id="process.panel.condition">
<java>
<class>MyClass</class>
<field>ConditionBoolean</field>
</java>
<returnvalue type="boolean">True</returnvalue>
</condition>
</conditions>
スペックxmlを次のように処理します。
<processing>
<job name="Step 1">
<executeclass name="MyClass">
<arg>...</arg>
</executeclass>
</job>
<onFail previous="false" next="false" />
<onSuccess condition="!process.panel.condition" previous="true" next="false" />
<onSuccess condition="process.panel.condition" previous="false" next="true" />
</processing>
そして、MyClassの実装:
import com.izforge.izpack.util.AbstractUIProcessHandler;
public class MyClasss {
public static boolean ConditionBoolean;
public void run(AbstractUIProcessHandler handler, String[] args) {
ConditionBoolean = false;
try {
...
ConditionBoolean = true;
} catch (Throwable e) {
handler.logOutput(e.getMessage(), false);
}
}
}