隐藏的领域价值空白的Thymeleaf

时间:2014-09-12 12:31:48

标签: java html spring-mvc thymeleaf

我有一个有两个隐藏字段的百里香形式。我使用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标记中未解析相同的值。该值为空,没有任何内容绑定到对象字段。

View Source

在此请求您的帮助。

编辑:

当我从隐藏元素中删除th:field属性时,代码有效。但是我想将它绑定到一个对象变量,以便服务器可以处理它。 `

4 个答案:

答案 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字段。为了解决这个问题,试试这个:

  1. 将输入定义为文本(而非隐藏)。
  2. 定义样式标记,如"display:none",以便隐藏屏幕中的元素。
  3. 结果应该是这样的:

    <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:/";
    }