アクションの実行可否を宣言的に記述する

Swing Application Frameworkでは、メソッドに@Actionアノテーションを付けることでアクションを定義できます。さらに、@ActionにenabledPropertyパラメータやselectedPropertyパラメータを付加することで、アクションの実行可否状態や選択状態を宣言的に記述可能です。

例えば、ドキュメントが変更されているときだけ「上書き保存」を実行できるようにするには、次のように記述します。

private boolean modified;

public boolean isModified() {
    return modified;
}

public void setModified(boolean modified) {
    boolean oldValue = this.modified;
    this.modified = modified;
    firePropertyChange("modified", oldValue, modified);
}

@Action(enabledProperty = "modified")
public void save() {
    // ...
}

これはこれで良い機能なんですが、boolean型のプロパティ名しか指定できない上に、プロパティがPropertyChangeイベント発火をサポートする必要があるので、いまいち使い勝手が悪いです。

フレームワークが、アプリケーションアイドル時にOGNL式を自発的に評価して、アクションの状態を更新できると便利だなと思います。イメージとしては以下のような感じです。

@S2Action(enabled = "documentModel.documentCount > 0")
public void closeAllDocuments() {
    // ...
}