如何从下拉框中获取用户选择的值并将其添加到模型中? [重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从下拉框中获取用户选择的值并将其添加到模型中? [重复]相关的知识,希望对你有一定的参考价值。
我有一个用户正在创建新考试的表单,用户可以从下拉菜单中选择一个主题。此下拉列表包含主题字符串而非实际主题对象。在我的程序中,存在与考试具有一对多关系的实际主题对象。
如何找到用户选择的值?我想将它添加到模型中,以便我可以创建一个考试对象并将其添加到数据库中。
将用户选择的主题字符串添加到模型后,如何找到用户选择的值?因为我想将他们选择的内容设置为相同的主题名称,然后在主题库中搜索具有相同名称的主题,以便可以将考试添加到该主题。
希望我的代码能让这一点更加清晰。
我收到了这个错误。绑定结果和bean名称主题的普通目标对象都不可用作请求属性。
这个代码形成了我的控制器
@GetMapping("/addexam")
public String showExamForm(Model model) {
// Here I am finding the subjects that belong to the current user
//and adding them as strings to an arraylist.
//I populate the dropdown with strings fromthis arraylist.
Authentication loggedInUser = SecurityContextHolder.getContext().getAuthentication();
String email = loggedInUser.getName();
User user = userRepository.findByEmailAddress(email);
ArrayList<String> subjects = new ArrayList<String>();
for(Subject sub:user.getSubject())
{
subjects.add(sub.getSubjectName());
}
model.addAttribute("subjects", subjects);
return "addExam";
}
@PostMapping("/addexam")
public String addNewExam(@ModelAttribute("exam") @Valid @RequestBody Exam
exam,UserRegistrationDto userDto, BindingResult result, Model model) {
examRepository.save(exam);
model.addAttribute("examTitle", exam.getExamTitle());
model.addAttribute("examGradeWorth", exam.getExamGradeWorth());
model.addAttribute("subject", exam.getSubject());
//I want to find the user selected value and set it to equal
//subjectname:
String subjectName =;
//Here I will search the subjectRepository for the subjectName and set subject to equal the subject that was found.
Subject subject = subjectRepository.findBySubjectName(subjectName);
//then exam will be added to that subject as subject has a one to many relationship with exam.
subject.addExam(exam);
subjectRepository.save(subject);
return "userProfile1";
}
}
这是html。
<form action="#" th:action="@{/addExam}" th:object="${exam}"
method="post">
<div th:object="${subject}">
<select th:field="*{subject}" class="form-control" id="subject"
name= "subject">
<option value="">Select subject</option>
<option
th:each="Subject : ${subjects}"
th:value="${Subject}"
th:text="${Subject}"></option>
</div>
<div>
<table>
<tr>
<td><input type="text" th:field="*{examTitle}" /></td>
</tr>
<tr>
<td> Exam grade worth </td>
<td><input th:field="*{examGradeWorth}" /></td>
</tr>
答案
我认为你不需要使用两个th:object
。只需使用th:value
。
例如,在下一个示例中,您将发送两个对象并在name
对象中设置student
,在status
对象中设置exam
。 (它不代表你的模型。这只是一个例子)。
<form th:action="@{/addExam}" method="post">
<input type="text" th:value="${student.name}" name="name"/>
<input type="text" th:value="${exam.status}" name="status"/>
<button type="submit">Go</button>
</form>
如果有一堆th:object
字段,exam
会很有用。
请记住,字段的名称必须与bean字段名称匹配。
因此,您的HTML或多或少会看起来像这样:
<form action="#" th:action="@{/addExam}" method="post">
<div>
<select th:field="*{subject}" class="form-control" id="subject" name="subject">
<option value="">Select subject</option>
<option
th:each="Subject : ${subjects}"
th:value="${Subject}"
th:text="${Subject}"></option>
</div>
<div>
<table>
<tr>
<td><input type="text" th:field="*{exam.examTitle}" /></td>
</tr>
<tr>
<td> Exam grade worth </td>
<td><input th:field="*{exam.examGradeWorth}" /></td>
</tr>
如果有效,请告诉我!
以上是关于如何从下拉框中获取用户选择的值并将其添加到模型中? [重复]的主要内容,如果未能解决你的问题,请参考以下文章
从表格中选择不同的名称和编号并将其显示到下拉框中,然后保存我该怎么办?