Home > Tags > Enum

Enum

TeedaのラジオボタンにString型ではなく列挙型(Enum)を使う

Teedaのラジオボタンは通常、String型でPageクラスに定義します。
http://teeda.seasar.org/ja/extension/reverse/input.html#%E3%83%A9%E3%82%B8%E3%82%AA%E3%83%9C%E3%82%BF%E3%83%B3_%E9%9D%99%E7%9A%84
が、そこを列挙型(Enum)することができます。こちらの方が型安全になっていいかなと思います。
もちろん、静的・動的両方いけます。

以下、サンプルです。

HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:te="http://www.seasar.org/teeda/extension" xml:lang="ja"
    lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Enumのサンプル</title>
</head>
<body>
<form id="Form">
<span id="allMessages"></span>

<h1>ラジオボタン(静的)</h1>
<div id="sex">
    <label><input type="radio" name="sex" value="MALE" />男性</label>
    <label><input type="radio" name="sex" value="FEMALE" />女性</label>
</div>

<h1>ラジオボタン(動的)</h1>
<input type="hidden" id="languageItemsSave" />
<span id="language">
    <input type="radio" name="language" />
</span>

<p><input type="submit" value="送信" id="doSubmit" /></p>

</form>
</body>
</html>

列挙型

public enum Sex {
    MALE("男性"),
    FEMALE("女性");

    private String japaneseName;

    private Sex(String japaneseName) {
        this.japaneseName = japaneseName;
    }

    public String getJapaneseName() {
        return japaneseName;
    }
}
public enum Language {

    JAPANESE("日本語", "JAPANESE", "こんにちわ"),
    ENGLISH("英語", "ENGLISH", "Hello");

    private String label;
    private String value;
    private String greeting;

    private Language(String label, String value, String greeting) {
        this.label = label;
        this.value = value;
        this.greeting = greeting;
    }

    public String getLabel() {
        return label;
    }

    public String getValue() {
        return value;
    }

    public String getGreeting() {
        return greeting;
    }
}

Pageクラス

public class EnumSamplePage {

    public Sex sex;

    public Language language;
    public List<Language> languageItems;

    public Class<?> initialize() {
        // 初期値の設定
        sex = Sex.FEMALE;
        language = Language.ENGLISH;

        languageItems = new ArrayList<Language>();
        for (Language lang : Language.values()) {
            languageItems.add(lang);
        }

        return null;
    }

    public Class<?> prerender() {
        return null;
    }

    public Class<?> doSubmit() {
        System.out.println(sex.getJapaneseName());
        System.out.println(language.getGreeting());
        return null;
    }
}

注意としては、
静的なラジオボタンで使う場合は、value属性に“列挙子”を指定すること(サンプルだと「MALE」「FEMALE」)
静的なラジオボタンで使う場合は、列挙型のフィールドに“label”“value”を変数名にもつ値を定義すること。
あと、HTMLにhidden属性に”~~ItemsSave”を配置すること。これをしないとPOSTしたときにデータが消えてしまう(これはString型でも同じですが)

Home > Tags > Enum

Search
Feeds
Meta

Return to page top