Java Thymeleaf下拉列表未填充
我有一个简单的枚举,它将包含各种地区:Java Thymeleaf下拉列表未填充,java,html,drop-down-menu,map,thymeleaf,Java,Html,Drop Down Menu,Map,Thymeleaf,我有一个简单的枚举,它将包含各种地区: public enum LocaleEnum { en_US,es_MX; private static EnumMap<LocaleEnum, String> map = new EnumMap<LocaleEnum, String>(LocaleEnum.class); // Pre-load the descriptive values. Will pull the descriptive value from a pr
public enum LocaleEnum {
en_US,es_MX;
private static EnumMap<LocaleEnum, String> map = new EnumMap<LocaleEnum, String>(LocaleEnum.class);
// Pre-load the descriptive values. Will pull the descriptive value from a property file later.
static {
String desc = "English";
for (LocaleEnum locale : LocaleEnum.values()) {
map.put(locale, desc);
desc = "Espanol";
}
}
public static EnumMap<LocaleEnum, String> getMap() {
return map;
}
public EnumMap<LocaleEnum, String> getLocales() {
EnumMap<LocaleEnum, String> map = LocaleEnum.getMap();
return map;
}
<select th:field="*{locales}">
<option value="NONE">---- Select ----</option>
<option th:each="locale : ${locales}"
th:value="${locale.key}"
th:text="${locale.value}">Englishy</option>
</select>
public enum LocaleEnum{
en_US,es_MX;
私有静态EnumMap=newEnumMap(LocaleEnum.class);
//预加载描述性值。稍后将从属性文件中提取描述性值。
静止的{
字符串desc=“英语”;
for(LocaleEnum区域设置:LocaleEnum.values()){
map.put(区域设置,描述);
desc=“Espanol”;
}
}
公共静态EnumMap getMap(){
返回图;
}
}
然后,我在模型上有一个方法将EnumMap传递给视图:
public enum LocaleEnum {
en_US,es_MX;
private static EnumMap<LocaleEnum, String> map = new EnumMap<LocaleEnum, String>(LocaleEnum.class);
// Pre-load the descriptive values. Will pull the descriptive value from a property file later.
static {
String desc = "English";
for (LocaleEnum locale : LocaleEnum.values()) {
map.put(locale, desc);
desc = "Espanol";
}
}
public static EnumMap<LocaleEnum, String> getMap() {
return map;
}
public EnumMap<LocaleEnum, String> getLocales() {
EnumMap<LocaleEnum, String> map = LocaleEnum.getMap();
return map;
}
<select th:field="*{locales}">
<option value="NONE">---- Select ----</option>
<option th:each="locale : ${locales}"
th:value="${locale.key}"
th:text="${locale.value}">Englishy</option>
</select>
public EnumMap getLocales(){
EnumMap map=LocaleEnum.getMap();
返回图;
}
我现在正试图使用Thymeleaf在下拉列表中显示这些值:
public enum LocaleEnum {
en_US,es_MX;
private static EnumMap<LocaleEnum, String> map = new EnumMap<LocaleEnum, String>(LocaleEnum.class);
// Pre-load the descriptive values. Will pull the descriptive value from a property file later.
static {
String desc = "English";
for (LocaleEnum locale : LocaleEnum.values()) {
map.put(locale, desc);
desc = "Espanol";
}
}
public static EnumMap<LocaleEnum, String> getMap() {
return map;
}
public EnumMap<LocaleEnum, String> getLocales() {
EnumMap<LocaleEnum, String> map = LocaleEnum.getMap();
return map;
}
<select th:field="*{locales}">
<option value="NONE">---- Select ----</option>
<option th:each="locale : ${locales}"
th:value="${locale.key}"
th:text="${locale.value}">Englishy</option>
</select>
----挑选----
英式
我在下拉列表中得到“----选择----”。在调试模式下,我看到getLocales()方法与EnumMap中的值一起被调用。
但是,下拉列表中没有其他内容。我不断地将我的实现与其他各种实现进行比较,但我没有看到我的失败。所有的想法都很受欢迎。谢谢。这里有一个更有效地使用枚举的解决方案。我明白了为什么要使用map来传递整个集合,但是有一种更好的方法可以使用
.values()
见下文
public enum LocaleEnum
{
en_US("en_US", "English"), es_MX("es_MX", "Espanol");
private final String locale;
private final String desc;
LocaleEnum(String locale, String desc)
{
this.locale = locale;
this.desc = desc;
}
public String getLocale()
{
return locale;
}
public String getDesc()
{
return desc;
}
}
然后更改将枚举添加到模型的方法。注意.values()
是用于返回数组的枚举的静态方法
public LocaleEnum getLocales()
{
return LocaleEnum.values();
}
所以你的胸腺素页面看起来像
<select th:field="*{locales}">
<option value="NONE">---- Select ----</option>
<option th:each="locale : ${locales}"
th:value="${locale.getLocale()}"
th:text="${locale.getDesc()}">Englishy</option>
</select>
----挑选----
英式
这是一个更有效地使用枚举的解决方案。我明白了为什么要使用map来传递整个集合,但是有一种更好的方法可以使用.values()
见下文
public enum LocaleEnum
{
en_US("en_US", "English"), es_MX("es_MX", "Espanol");
private final String locale;
private final String desc;
LocaleEnum(String locale, String desc)
{
this.locale = locale;
this.desc = desc;
}
public String getLocale()
{
return locale;
}
public String getDesc()
{
return desc;
}
}
然后更改将枚举添加到模型的方法。注意.values()
是用于返回数组的枚举的静态方法
public LocaleEnum getLocales()
{
return LocaleEnum.values();
}
所以你的胸腺素页面看起来像
<select th:field="*{locales}">
<option value="NONE">---- Select ----</option>
<option th:each="locale : ${locales}"
th:value="${locale.getLocale()}"
th:text="${locale.getDesc()}">Englishy</option>
</select>
----挑选----
英式
这是一个更有效地使用枚举的解决方案。我明白了为什么要使用map来传递整个集合,但是有一种更好的方法可以使用.values()
见下文
public enum LocaleEnum
{
en_US("en_US", "English"), es_MX("es_MX", "Espanol");
private final String locale;
private final String desc;
LocaleEnum(String locale, String desc)
{
this.locale = locale;
this.desc = desc;
}
public String getLocale()
{
return locale;
}
public String getDesc()
{
return desc;
}
}
然后更改将枚举添加到模型的方法。注意.values()
是用于返回数组的枚举的静态方法
public LocaleEnum getLocales()
{
return LocaleEnum.values();
}
所以你的胸腺素页面看起来像
<select th:field="*{locales}">
<option value="NONE">---- Select ----</option>
<option th:each="locale : ${locales}"
th:value="${locale.getLocale()}"
th:text="${locale.getDesc()}">Englishy</option>
</select>
----挑选----
英式
这是一个更有效地使用枚举的解决方案。我明白了为什么要使用map来传递整个集合,但是有一种更好的方法可以使用.values()
见下文
public enum LocaleEnum
{
en_US("en_US", "English"), es_MX("es_MX", "Espanol");
private final String locale;
private final String desc;
LocaleEnum(String locale, String desc)
{
this.locale = locale;
this.desc = desc;
}
public String getLocale()
{
return locale;
}
public String getDesc()
{
return desc;
}
}
然后更改将枚举添加到模型的方法。注意.values()
是用于返回数组的枚举的静态方法
public LocaleEnum getLocales()
{
return LocaleEnum.values();
}
所以你的胸腺素页面看起来像
<select th:field="*{locales}">
<option value="NONE">---- Select ----</option>
<option th:each="locale : ${locales}"
th:value="${locale.getLocale()}"
th:text="${locale.getDesc()}">Englishy</option>
</select>
----挑选----
英式
如何尝试使用
类型映射
地方性
如何使用
类型尝试映射
地方性
如何使用
类型尝试映射
地方性
如何使用
类型尝试映射
地方性
谢谢OhioCowboy&Wundwin我真的很感谢你在这方面的帮助 我终于明白我做错了什么。我所需要做的就是改变:
<option th:each="locale : ${locales}"
谢谢OhioCowboy&Wundwin我真的很感谢你的帮助
我终于明白我做错了什么。我所需要做的就是改变:
<option th:each="locale : ${locales}"
谢谢OhioCowboy&Wundwin我真的很感谢你的帮助
我终于明白我做错了什么。我所需要做的就是改变:
<option th:each="locale : ${locales}"
谢谢OhioCowboy&Wundwin我真的很感谢你的帮助
我终于明白我做错了什么。我所需要做的就是改变:
<option th:each="locale : ${locales}"
我认为jsp中绑定的EnumMap
不是一个好主意,如何使用其他带有字符串的映射?Wundwin,我不确定我是否理解您对EnumMap的关注。你能解释一下你的担忧吗?由于这是我第一次使用EnumMap,我很想了解您认为在本例中使用EnumMap可能会遇到哪些问题。谢谢您的评论。我认为jsp中绑定的EnumMap
不是一个好主意,如何使用其他带有String
的映射?Wundwin,我不确定我是否理解您对EnumMap的关注。你能解释一下你的担忧吗?由于这是我第一次使用EnumMap,我很想了解您认为在本例中使用EnumMap可能会遇到哪些问题。谢谢您的评论。我认为jsp中绑定的EnumMap
不是一个好主意,如何使用其他带有String
的映射?Wundwin,我不确定我是否理解您对EnumMap的关注。你能解释一下你的担忧吗?由于这是我第一次使用EnumMap,我很想了解您认为在本例中使用EnumMap可能会遇到哪些问题。谢谢您的评论。我认为jsp中绑定的EnumMap
不是一个好主意,如何使用其他带有String
的映射?Wundwin,我不确定我是否理解您对EnumMap的关注。你能解释一下你的担忧吗?由于这是我第一次使用EnumMap,我很想了解您认为在本例中使用EnumMap可能会遇到哪些问题。谢谢你的评论。OhioCowboy,首先感谢你的回复。我实现了你的代码。我做了2个小改动来删除一些错误:1。将public LocalEnum getLocales()更改为public LocalEnum[]getLocales()2。改为。一旦我这样做了,它就运行了,但是下拉列表中的值仍然没有填充(除了“--Select--”之外)。还有什么想法吗?你确定模型是用LocaleEnum填充的吗?在公共LocalEnum[]getLocales()方法上方添加@modeldattribute(“locales”)?FFR:我已经替换了th:each=“locale:${locales}th:each=“locale