我有这个枚举
enum Types{
A, B
}
我有一个表格课
public class MyForm {
private Types[] types;
//getter setters
}
这是我的选择表格
<form th:action="${#httpServletRequest.requestURI}" th:object="${myForm}" method="POST" id="form">
<select name="types" multiple="" id="testSelect"
th:each="type : ${T(com.test.Types).values()}"
th:value="${type}"
th:text="${type}"
th:selected="*{types != null AND #arrays.contains(types, type)}"
>
</select>
</form>
这是我遇到的错误。
Property or field 'type' cannot be found on object of type 'com.test.MyForm' - maybe not public or not valid?
答案 0 :(得分:0)
首先,我相信您有错字,应该是type !=
,而不是!=
。另外,您正在使用所选的*
,而不是$
。另外,我相信您正在以一种不起作用的方式使用Thymeleaf的#list.contains()
。您应该像#list.contains(types, type)
这样使用整个函数。最后一件事,selected
,value
和text
标签应该放在option
元素中,而不是select
中。最后,您的代码应类似于以下代码。
<select name="types" multiple="" id="testSelect">
<option th:each="type : ${T(com.test.Types).values()}"
th:value="${type}" th:text="${type}"
th:selected="${types != null AND #arrays.contains(types, type)}">
</option>
</select>
最后一件事,我不确定变量types
的来源,我假设您在某个地方对其进行了初始化。
答案 1 :(得分:0)
最好是将表单支持bean更改为具有一些枚举集合,而不是像这样的数组:
public class MyForm {
private List<Types> types = new ArrayList<Types>();
//getter setters
}
然后,在呈现表单之前,只需在数组中填充类型,只需将它们添加到列表中即可在控制器中预先选择它们。
然后应该能够简单地跳过选定的逻辑...
<select th:field="*{types}" multiple="multiple" id="testSelect">
<option th:each="type : ${T(com.test.Types).values()}"
th:value="${type}" th:text="${type}">
</option>
</select>
Thymeleaf会为您做魔术;-)