我有一个有两个隐藏字段的百里香形式。我使用th:value指定隐藏字段的值,并将这些字段绑定到对象。
<div class="w-row">
<div class="w-col w-col-6">
<div class="question_text_sc">
<p th:text="${questionVO.questionText}" />
<p th:text="${questionVO.questionStem}" />
<p th:text="${sequenceNo}" />
<p th:text="${quizID}" />
</div>
</div>
<div class="question_stem_sc"></div>
<div class="w-col w-col-6">
<div>
<div class="w-form">
<form class="w-clearfix" id="email-form" name="email-form" data-name="Email Form" action="#" th:action="@{/quiz/question}" th:object="${userResponseVO}" method="post">
<div th:each="option: ${questionVO.answerOptions}" class="w-radio radio_select" th:id="${'radio_1'}">
<input class="w-radio-input" id="radio" type="radio" name="answer_sc" th:field="*{answerID}" th:value="${option}"/>
<label class="w-form-label" id="answer_1" for="radio"><p th:text="${option}" /></label>
</div>
<input type="hidden" name="sequenceNo" th:field="*{sequenceNo}" th:value="${sequenceNo}" ></input>
<input type="hidden" name="quizID" th:field="*{quizID}" th:value="${quizID}"></input>
<button class="button submit_answr" type="submit">Next Question</button>
</form>
我想将quizID和sequenceNo字段与对象中的相应字段绑定。第6行和第7行正确解析序列号/测验ID的值并显示它。但是,在表单内的th:value标记中未解析相同的值。该值为空,没有任何内容绑定到对象字段。
在此请求您的帮助。
编辑:
当我从隐藏元素中删除th:field属性时,代码有效。但是我想将它绑定到一个对象变量,以便服务器可以处理它。 `
答案 0 :(得分:13)
我们可以通过两种方式解决您的方案
第一种方式:<input type="hidden" th:value="${question.id}" th:attr="name='quizID'" />
第二种方式:
<input type="hidden" th:value="${question.id}" name="quizID" />
如果您使用百里香[ th:field =“* {sequenceNo}”,百里香的内部代码就像,
它会检查特定元素是否有名称属性,如果可用 th:字段值覆盖名称属性。
名称= “sequenceNo”
它将检查特定元素是否有任何 id 属性,如果它不具有 th的名称:字段值新属性添加到ie)id 强>
ID = “sequenceNo”
答案 1 :(得分:3)
对我来说,使用th:field
帮助设置name
(或实际th:attr
}
th:value="${question.id}"
th:attr="name='questionIds[' + ${iter.index} + ']'"
在我的示例中,我希望获得${question}
的值,但输入中的目标是questionIDs[i]
像name=answerId
这样的简单问题就足够了。
答案 2 :(得分:0)
似乎Thymeleaf无法识别hidden
字段。为了解决这个问题,试试这个:
"display:none"
,以便隐藏屏幕中的元素。结果应该是这样的:
<input type="text" th:field="*{parameters[${stat.index}].field}" style="display:none;">
希望它有所帮助。
答案 3 :(得分:0)
假设您必须收集对页面的评论。然后,除了注释外,还必须将页面名称发送给控制器。当然,用户不必重新输入此页面的名称。该信息必须传递给控制器,但是th:field仅映射用户输入的值,而不映射默认情况下生成的值。 但是您可以将此页面的名称作为URL中的参数传送给控制器。 在html中,您有类似的内容:
<form th:action="@{/saveComment(lastPage=${lastPage})}" th:object="${comments}" method="post" enctype="multipart/form-data">
<div class="row">
.................................................................................
<h2>Enter your comment</h2>
<textarea th:field="${comments.comment}" rows="10" cols="100" name="comment" id="comment"></textarea>
<label for="comment">Your comment here</label><br />
<input type="submit" name ="submit" value="Submit" />
</div>
</form>
In controller, you put stuff like this:
@PostMapping("/saveComment")
public String saveComment(Comments comments, String lastPage) {
comments.setPage_commented(lastPage);
commentsRepository.save(comments);
return "redirect:/";
}