メンチカツには醤油でしょ!!

AWS/Java/Node.js/Spreadsheets/Docker/Jenkins/コミュニティ・勉強会レポを主とした技術系ブログ

Struts2のJSP内でenumやインナークラスへアクセスする方法 (OGNL式)

環境

Struts 2.3.30

今回はenumやインナークラスへのアクセスです

以前も似たようなことを書きました。

ryoichi0102.hatenablog.com

enumへのアクセスもstaticフィールドと同様

こんな実装だったとしたら

package fully.qualified.packagename;
public enum EnumName {
    ENUM_VALUE,
}
<s:property value="%{@fully.qualified.packagename.EnumName@ENUM_VALUE}" />

完全修飾クラス名を@@で囲いフィールド名を繋げ{}で囲って%を接頭語に、という所は同じですね。

インナークラスへのアクセスは$で繋ぐ

例えば外部のpropertiesから設定値を取ってきてenumを返すUtil/メソッドと
Util内のインナーenumを比較するようなコードはこうなります。

package fully.qualified.packagename;
public class UtilClassName {
    public enum InnerEnum {
        ENUM_VAL,,,
    }
    pubic static UtilClassName getInstance() {
        return instance;
    }
    public InnerEnum getSomeEnum() {
        return InnerEnum.valueOf(getSomePropertyValue());
    }
}
<s:if test="%{@fully.qualified.packagename.UtilClassName@getInstance().getSomeEnum() == @fully.qualified.packagename.UtilClassName$InnerEnum@ENUM_VAL}">
    <!-- true -->
</s:if>

※ inner/enumで同時に起こったのでちょっと手間取りました^^

参考

stackoverflow.com