超簡単なサンプル2(seleniumでテストを書くためにちょっと作成)

前回超簡単なサンプル(seleniumでテストを書くためにちょっと作成) - tomoTakaの日記のweb画面に入力項目を2つ追加。

  • 遷移後の画面(選択した言葉と言語で挨拶を表示)


JSFで画面を作成していますが、ラジオボタンや、セレクトメニューの画面表示ラベルと値をcontroller側ではenumを使用して実装。
ラジオボタンとセレクトメニューの組み合わせで「Hello java」とか「おはよう java」とか表示しているが、どうもすっきり実装できていない、、、
とりあえずtomoTaka01/HelloSample: JaveEE6 project wit... - GitHubにコードを保管。
詳細はまた来週末に記載予定。
画面表示しているLanguageセレクトメニューに3番目の言語を追加する場合、以下の実装クラスの★1、2、4カ所に修正が必要になるので★3のところで追加して、後はどこか実装をまとめたいが、、、

  • Greet selectラジドボタンの実装
public enum GreetSelect {
    Hello("1", "Hello", "こんにちは"),   // ★1Languageを増やすとパラーメータが必要
    GoodMorning("2", "Good Morning", "おはよう") ,
    GoodNight("3", "Good Night", "おやすみ")
    ;
    private final String value;
    private final String label;
    private final String japanesPhrase;   // ★2Languageを増やすとここにも追加必要
    private final String englishPhrase;
    GreetSelect(String value, String label, String japanesPhrase){
        this.value = value;
        this.label = label;
        this.englishPhrase = label;
        this.japanesPhrase = japanesPhrase;
    }
    public SelectItem getSelectItem(){
        return new SelectItem(this.value, this.label);
    };
    public String getValue(){
        return this.value;
    }

    public String getEnglishPhrase() {
        return englishPhrase;
    }

    public String getJapanesPhrase() {
        return japanesPhrase;
    }
}
  • Languageセレクトメニューの実装
public enum LanguageSelect {
    English("1", "English"),
    Japanes("2", "Japanes");  // ★3Languageをここで追加
    private final String value;
    private final String label;
    private LanguageSelect(String value, String label) {
        this.value = value;
        this.label = label;
    }
    public SelectItem getLanguageItem() {
        return new SelectItem(this.value, this.label);
    }
    public String getValue() {
        return this.value;
    }
}
  • controller側の実装
@ManagedBean(name="HelloCtl")
@SessionScoped

public class HelloController {
    private static List<SelectItem> greetItems;
    private static List<SelectItem> languageItems;
    private static Map<String, GreetSelect> greetMap;
    static {
        initGreetItems();
        initLanguageItems();
    }
    
    private String name;
    private String greetSelect;
    private String languageSelect;
    
    public HelloController() {
    }
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    public String doGreet(){
        return "GreetingPage.xhtml";
    }
    public String getGreeting(){
        String phrase = getPhrase();
        return phrase + " " + name; // ★「greet」ボタンクリック時にここの文言がh1タグに表示
    }

    public String getGreetSelect() {
        return greetSelect;
    }

    public void setGreetSelect(String greetSelect) {
        this.greetSelect = greetSelect;
    }

    public String getLanguageSelect() {
        return languageSelect;
    }

    public void setLanguageSelect(String languageSelect) {
        this.languageSelect = languageSelect;
    }

    public List<SelectItem> getGreetItems() {
        return greetItems;
    }

    public List<SelectItem> getLanguageItems() {
        return languageItems;
    }

    private static void initGreetItems() {
        greetItems = new ArrayList();
        greetMap = new HashMap();
        for (GreetSelect sel : GreetSelect.values()) {
            greetItems.add(sel.getSelectItem());
            greetMap.put(sel.getValue(), sel);
        }
    }

    private static void initLanguageItems() {
        languageItems = new ArrayList();
        for (LanguageSelect sel : LanguageSelect.values()) {
            languageItems.add(sel.getLanguageItem());
        }
    }

    private String getPhrase() {
        GreetSelect greetSel = greetMap.get(this.greetSelect);
        if (LanguageSelect.Japanes.getValue().equals(this.languageSelect)) {
            return greetSel.getJapanesPhrase();
        } else {
            return greetSel.getEnglishPhrase();
        }                                                              // ★4Languageを追加するとここにも追加必要
    }
}