我正在使用Thymeleaf和Spring Boot以及MVC . 我所拥有的是一个表单,其中某些复选框正在填充从控制器添加到模型中的对象(q1)
我想知道的是,如何正确地使用Thymeleaf将所选复选框与我的结果对象(surveyData)绑定到(复杂)对象列表中 .
Edit 这也是我第一次不确定问题出在何处 . 我确实尝试调试 lot 但无法确定问题的确切位置 . 我尝试了各种不同的组合来实现这一目标并获得了各种不同的结果(当然主要是例外) . 我很难在这里发布所有这些内容,所以如果你能提出我想要尝试的内容并发布结果 .
到目前为止我所拥有的:(复选框的th:字段显然不起作用)
Code:
HTML代码段:
<form action="#" th:action="@{/controlleraction}" method="post" th:object="${surveyData}">
<table class="table table-striped jambo_table bulk_action" id="table-resp">
<thead>
<tr>
<th></th>
</tr>
</thead>
<tbody>
<tr th:each="act,iter : ${q1}">
<td>
<input type="checkbox" class="check" th:value="${act.optionId}" th:field="*{keyResponsibilities.optionId.optionId}" />
</td>
</tbody>
</table>
</form>
SurveyData.java
@Entity
@Table(name = "survey_data")
public class SurveyData implements Serializable{
@Id
@Column(name = "some_id")
private Long someId;
@ElementCollection
@CollectionTable(name = "key_responsibilities", joinColumns = @JoinColumn(name = "data_id"))
private List<KeyResponsibilities> keyResponsibilities = new ArrayList<>();
public List<KeyResponsibilities> getKeyResponsibilities() {
return keyResponsibilities;
}
public void setKeyResponsibilities(List<KeyResponsibilities> keyResponsibilities) {
this.keyResponsibilities = keyResponsibilities;
}
}
KeyResponsibilities.java
@Embeddable
public class KeyResponsibilities {
@OneToOne
@JoinColumn(name = "option_id")
private OptionsMaster optionId;
@Column(name = "other")
private String other;
public OptionsMaster getOptionId() {
return optionId;
}
public void setOptionId(OptionsMaster optionId) {
this.optionId = optionId;
}
public String getOther() {
return other;
}
public void setOther(String other) {
this.other = other;
}
}
OptionsMaster.java
@Entity
@Table(name = "options_master")
public class OptionsMaster implements Comparable<OptionsMaster> {
private int optionId;
private String text;
@Id
@Column(name = "option_id")
public int getOptionId() {
return optionId;
}
public void setOptionId(int optionId) {
this.optionId = optionId;
}
@Basic
@Column(name = "text", length = -1)
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
@Override
public int compareTo(OptionsMaster o) {
return Integer.compare(this.getOptionId(),o.getOptionId());
}
}