0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

enumとThymeleafを使用した画面表示

Last updated at Posted at 2023-01-31

背景

enum(定数)のフィールドを持ったドメインの要素を画面に表示したいため実装しました。
本記事に記載した方法は保守性などの観点からよくないという意見もあるため、仕様や実現したいことから実装方法を選定してください。
参考サイトは最後にまとめております。

環境

macOS Monterey / バージョン12.0.1
Spring Boot 2.7.7
IDE Eclipse
openJDK11
Maven3.8.6
Thymeleaf3

実現したいこと

enumクラスにて設定した定数をhtml、Thymeleafを利用して画面で表示する

Itemドメインにcolorというフィールドがあり、それを定数クラス群に設定する

Item.java
public class Item {
	/** ID */
	private Integer id;
	/** 商品名 */
	private String name;
    /** 商品カラー */
	private Integer color;  //これを定数とする.
}
Color.java
public enum Color {
    RED("red", 1),                  //定数名(key,value),フィールドはいくつでも設定可能
    BLUE("blue", 2),
    GREEN("green", 3);

    private final String key;
    private final int value;

    //コンストラクタの設定(アクセス修飾子はprivate)
	private Condition(final String key, final int value) {
		this.key = key;
		this.value = value;
	}

     /**
	 * カラーのIDから一致するインスタンスを返すメソッド.
	 * 
	 * @param id カラーID
	 * @return 一致するインスタンス
	 */
	public static Color of(int value) {
		for (Color color : Color.values()) {     
			if (color.getValue() == value) {
				return color;
			}
		}
		throw new IndexOutOfBoundsException("The value of color doesn't exist.");
	}

	public int getValue() {
		return value;
	}

	public String getKey() {
		return key;
}
enum.html
//画面表示
//クラス名はColor
//itemはControllerクラスなどでmodelに格納されているとする

<span th:text="${T(パッケージ名.クラス名).of(item.color).getKey()}"></span>

//セレクトボックスの作成
<select name="color">
	<option th:each="color : ${T(パッケージ名.クラス名).values()}"
            th:value="${color.getValue()}"
            th:text="${color.getKey()}" >
    </option>
</select>

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?