无法找到任何示例或方法来执行此操作,最后注册到此论坛寻求帮助! 我的应用程序是问卷调查表 - 我显示问题,用户从下拉列表中选择答案。 我有两个模型属性 1)问题对象列表" questionList"是模型中的变量名称 2)salesResponse是另一个属性的变量名 - 它是SalesResponse类的对象。 SalesResponse有一个名为"的回复"这是一个TreeMap。它有一个默认的构造函数,以及"响应"的setter / getter。 在POST时,密钥应该是问题的ID,值应该是所选选项的值。 所以,应该是TreeMap。这是我想在用户进行POST时在我的salesResponse对象中填充的地图。
我的控制器将这两个对象加载到上下文中...我不确定如何编写表单!这大致是我需要的:
<form action="#" th:action="@{/ehc}" th:object="${salesResponse}"
method="post">
<table>
<tr th:each="question: ${questionList}">
<td th:text="${question.questionText}" th:value="${question.ID}"
th:name=${..what??..}
th:field="*{THIS SHOULD BECOME the KEY in responses TreeMap}"></td>
<td><select th:field="*{THIS SHOULD BECOME THE VALUE in responses TreeMap}">
<option th:text="${question.option1}" th:value="2"></option>
<option th:text="${question.option2}" th:value="4"></option>
<option th:text="${question.option3}" th:value="6"></option>
</select>
</td>
</tr>
<tr>
<td><input type="submit" value="Submit" /></td>
<td><input type="reset" value="reset" /></td>
</tr>
</table>
</form>
应该怎么写? Spring会不会足够聪明,一次填充响应TreeMap,One Map.Entry?
编辑:我试过这个,它没有工作(得到这个例外),但也许它给了别人灵感来解决这个问题!java.lang.NumberFormatException: For input string: "iterStat.index"
试用代码:
<form action="#" th:action="@{/ehc}" th:object="${salesResponse}"
method="post">
<table>
<tr th:each="question,iterStat: ${questionList}">
<td><input type="number" readonly="readonly"
th:text="${question.questionText}" th:name="${responses}"
th:value="${question.ID}"
th:field="*{responses[iterStat.index].key}"/></td>
<td><select th:field="*{responses[iterStat.index].value}">
<option th:text="${question.option1}" th:value="2"></option>
<option th:text="${question.option2}" th:value="4"></option>
<option th:text="${question.option3}" th:value="6"></option>
</select>
</td>
</tr>
<tr>
<td><input type="submit" value="Submit" /></td>
<td><input type="reset" value="reset" /></td>
</tr>
</table>
</form>
答案 0 :(得分:0)
在经历了许多不眠之夜之后,我已经开始工作,并将其记录下来以便其他人尝试这样做会有所帮助: 以下是视图中的代码:
<form action="#" th:action="@{/ehc}" th:object="${salesResponse}"
method="post">
<table>
<tr th:each="entry,iterStat: ${responses}">
<td th:text="${salesResponse.questionList[iterStat.index].questionText}"></td>
<td><select th:name="'responses[' + ${entry.key} +']'">
<!-- <td><select th:field="*{responses[__${entry.key}__]}">-->
<option selected="selected" th:text="${salesResponse.questionList[iterStat.index].option1}"
th:value="2" ></option>
<option th:text="${salesResponse.questionList[iterStat.index].option2}"
th:value="4" ></option>
<option th:text="${salesResponse.questionList[iterStat.index].option3}"
th:value="6" ></option>
</select>
</td>
</tr>
<tr>
<td><input type="submit" value="Submit" /></td>
<td><input type="reset" value="reset" /></td>
</tr>
</table>
</form>
关键因素是使select标签正确。呈现HTML时,您可以看到&#34;响应[n]&#34;在选择的名称字段中。这基本上是指&#39; Key&#39;生成的映射和值字段是相应的值。 现在,做完这个,我确实注意到当我使用&#34; th:field&#34;我的回复getter在地图上只被调用了300次,只有15个条目。我用th:name替换了th:field来生成相同的html,现在只调用了15次。试图在网上寻找原因,但没有发现任何东西。现在,我很高兴继续前行,因为花了这么多时间在这个障碍上!