Spring Boot获取复选框值

时间:2019-06-24 04:11:35

标签: javascript java spring thymeleaf

班级问题:

class question{
          private String questionContent;
          private String questionId;
          private List<String> options;
     }

我的jsonData:

[{'questionContent': 'content1', 'options': ['a', 'b', 'c', 'd'], 'questionId': '001'},
 {'questionContent': 'content2', 'options': ['a', 'b', 'c', 'd']}, 'questionId': '002']

并且我使用fastjson创建列表

List<Question> questionList = JSON.parseArray(jsonData, Question.class);

使用百里香叶创建复选框:

<form>
<div th:each="question : ${questionList}">
    <div>
        <label th:text="${question.questionContent}"></label>
    </div>
    <div th:each="question2 : ${question.Options}">
        <input class="options" th:name="${question.questionId}"
         type="checkbox" th:value="${question2}">
    </div>
</div>
</form>

spring boot如何获取复选框的值?如何实现控制器? 还是ajax发布数据?

1 个答案:

答案 0 :(得分:0)

您可以使用Jquery将数据作为json手动提交到后端的REST POST端点。 您可以按照自己喜欢的任何方法进行操作。在这种情况下,我所做的是在提交表单时触发jquery表单提交,并使用ajax向REST控制器发出POST请求。在此,我假设有一组特定的复选框只会选中“复选框”。否则,您将不得不对其进行修改。

使用Jquery:

$(document).ready(function() {
$( "form" ).submit(function() {
  event.preventDefault();

 var questions;
 questions = {}; 
 $.each($("input[type='checkbox']:checked"),function(){
   var questionName,questionValue;
   questionValue = $(this).val();
   questionName = $(this).attr('name')
   questions[questionName] = questionValue;
 });

$.ajax({
type : 'POST',
contentType : "application/json;charset=utf-8",
url : '/endpoint/questions/save',
data : JSON.stringify(questions),
dataType : 'json',              
success : function(data) {

        }
    });
});
});

还有一个休息端点,如:

@RestController
@RequestMapping("/endpoint/questions")
public class QuestionsController {

    @Autowired
    private QuestionsService service;

    @PostMapping
    @RequestMappint("/save")
    @ResponseStatus(HttpStatus.CREATED)
    public Long create(@RequestBody Questions resource) {
        Preconditions.checkNotNull(resource);
        return service.create(resource);
    }
}