我使用 Spring Initializr、嵌入式 Tomcat + Thymeleaf 模板引擎生成了一个 Spring Boot Web 应用程序,并将打包为可执行的 JAR 文件。
使用的技术 :
Spring Boot 1.4.2.RELEASE,Spring 4.3.4.RELEASE, Thymeleaf 2.1.5.RELEASE, Tomcat Embedded 8.5.6, Maven 3, Java 8
我有这个课
public class AlarmNotification {
private Long id;
private Action action;
private Application aplication;
private Device device;
private TimeLapse timeLapse;
private Guardian guardian;
private List<SystemAlarm.Level> level;
...
}
和这个模板
<form class="form-style-9" action="#" th:action="@{/alarmNotification/save}" th:object="${alarmNotification}" method="post">
<ul>
<li>
<input type="hidden" th:field="*{id}" />
<select name="device" class="field-style field-split align-left">
<option value="ANDROID">ANDROID</option>
<option value="IOS">IOS</option>
</select>
<select th:field="*{guardian}">
<option th:each="guardian : ${guardians}"
th:value="${guardian.id}"
th:text="${guardian.name}"></option>
</select>
</li>
<li>
<select th:field="*{timeLapse}">
<option th:each="timeLapse : ${timeLapses}"
th:value="${timeLapse.id}"
th:text="${timeLapse.description}"></option>
</select>
</li>
<li>
<select th:field="*{level}" multiple="multiple">
<option th:each="level : ${alarmLevels}"
th:value="${level}"
th:text="${level}"></option>
</select>
</li>
<li>
</li>
<li>
<input type="submit" value="SAVE" />
</li>
</ul>
</form>
和控制器:
@RequestMapping(value = { "/save" }, method = RequestMethod.POST)
public String saveAlarmNotification (@Valid AlarmNotification alarmNotification, BindingResult bindingResult, Model model) throws DataAccessException, SQLException {
System.out.println ("<-------------------------------------->");
System.out.println (alarmNotification);
System.out.println ("<-------------------------------------->");
..
}
但对象 alarmNotification 的所有值均为空,设备和级别除外:
AlarmNotification [id=null, action=null, aplication=null,
device=Device [id=null, deviceKey=ANDROID],
timeLapse=null, guardian=null,
level=[HIGH, MEDIUM, LOW]]
我认为在您的选择标签中,th:value 不正确,id 设置不正确。
即对于卫报来说应该是这样的
<select th:field="*{guardian}">
<option th:each="guardian : ${guardians}"
th:value="${guardian.id}"
th:text="${guardian.name}"></option>
</select>
对于延时摄影应该是这样声明
的<select th:field="*{timeLapse}">
<option th:each="timeLapse : ${timeLapses}"
th:value="${timeLapse.id}"
th:text="${timeLapse.description}"></option>
</select>
对于我认为您通过了错误的字段,即它可能看起来像那样
<select th:field="*{level}" multiple="multiple">
<option th:each="level : ${alarmLevels}"
th:value="${level}"
th:text="${level}"></option>
</select>
我希望这有所帮助。