[英]How do I use the Checkbox with Java + Spring in Thymeleaf/HTML?
如何通过Thymeleaf将html复选框中的true或false接收到我的控制器,所以我可以将true或false值保存在数据库中。 到目前为止,我收到以下错误:
org.thymeleaf.exceptions.TemplateInputException:\n 模板解析期间发生错误(模板:“类路径资源[templates / normal / start-dag.html]”)
引起原因:org.attoparser.ParseException:\n 执行处理器'org.thymeleaf.spring5.processor.SpringInputCheckboxFieldTagProcessor'时出错(模板:“ normal / start-dag”-第24行,col 44)
引起原因:org.thymeleaf.exceptions.TemplateProcessingException:\n 执行处理器'org.thymeleaf.spring5.processor.SpringInputCheckboxFieldTagProcessor'时出错(模板:“ normal / start-dag”-第24行,col 44)
2018-07-17 09:05:16.097错误6713-[nio-8080-exec-2] oaccC [。[。[/]。[dispatcherServlet]:Servlet [dispatcherServlet]的Servlet.service()路径[]引发异常[请求处理失败;\n 嵌套的异常是org.thymeleaf.exceptions.TemplateInputException:模板解析期间发生了根本原因(模板:“类路径资源[templates / normal / start-dag.html]”))
java.lang.IllegalStateException:Bean名称“ goodNightOfSleep”的BindingResult和普通目标对象都不能用作请求属性\n 在org.springframework.web.servlet.support.BindStatus。(BindStatus.java:153)〜[spring-webmvc-5.0.7.RELEASE.jar:5.0.7.RELEASE]\n 在org.springframework.web.servlet.support.RequestContext.getBindStatus(RequestContext.java:903)〜[spring-webmvc-5.0.7.RELEASE.jar:5.0.7.RELEASE]
我的html看起来像这样:
<table>
<tr>
<input type="checkbox" th:path="goodNightOfSleep">
<label th:for="${#ids.next('goodNightOfSleep')}" th:text="#{StartDay.goodNightOfSleep}">Kan du huske hvad du drømte?</label>
<input type="checkbox" th:field="*{goodNightOfSleep}"/>
</tr>
</table>
而我的控制器:
// Start Day
@GetMapping("/normal/start-dag")
public String opretGoal() {
return "normal/start-dag";
}
@PostMapping("/normal/start-dag")
public String opretGoal(@ModelAttribute StartDay startDay, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "/normal/menu";
}
startDayService.createGoalOfTheDay(startDay);
return "normal/menu";
}
我的StartDay.java类:
@Entity
@Table(name = "start_day")
public class StartDay {
@Id
@Column(name = "age_in_days", nullable = true)
private int ageInDays;
@Column(name = "day_created", nullable = true)
private String dayCreated;
@Column(name = "username", nullable = true)
private String username;
@Column(name = "dream_remembered", nullable = true)
private boolean dreamRemembered;
@Column(name = "nightmare", nullable = true)
private boolean nightmare;
@Column(name = "waking_time", nullable = true)
private int wakingTime;
@Column(name = "good_night_of_sleep", nullable = true)
private boolean goodNightOfSleep;
任何帮助表示赞赏:)
更新#1
所以我只是试图从html移动第二个th:field,所以看起来像这样:
<table>
<tr>
<input type="checkbox" th:path="goodNightOfSleep">
<label th:for="${#ids.next('goodNightOfSleep')}" th:text="#{StartDay.goodNightOfSleep}">Kan du huske hvad du drømte?</label>
</tr>
</table>
@GetMapping("/normal/start-dag")
public String opretGoal(Model model) {
...
StartDay startDay = .... // e.g. new StartDay();
model.addAttribute("startDay", startDay);
...
return "normal/start-dag";
}
@PostMapping("/normal/start-dag")
public String opretGoal(@Valid StartDay startDay, BindingResult bindingResult, Model model)
{
if (bindingResult.hasErrors()) {
// log and/or handle errors
}
else {
// your logic goes here
startDayService.createGoalOfTheDay(startDay);
}
return "/normal/menu";
}
<form action="... or use th:action" method="post" th:object="${startDay}">
...
<input type="checkbox" name="goodNightOfSleep">
...
</form>
您也可以将th:field用于goodNightOfSleep-Input,但它的工作原理与上面所述类似。 Thymeleaf通过名称将字段与表单元素中定义的对象匹配。 如果选中此框,则该值为true,否则为false。
重点是1.)将对象添加到模型中,以及2.)接收对象作为输入参数。
警告:代码未经测试即被写入编辑器。 也许有错别字。
您是否尝试过返回ModelAndView
而不是String
,并按此处所述将StartDay
添加为Model属性?
例如
@GetMapping("/normal/start-dag")
public ModelAndView opretGoal(){
ModelAndView mav = new ModelAndView("normal/start-dag");
mav.addObject("StartDay", new StartDay());
return mav;
}
- java.lang.IllegalStateException:BeanResult'goodNightOfSleep'的BindingResult或普通目标对象都不能作为请求属性在org.springframework.web.servlet.support.BindStatus。(BindStatus.java:153)〜[spring-webmvc-5.0。 7.RELEASE.jar:5.0.7.RELEASE],位于org.springframework.web.servlet.support.RequestContext.getBindStatus(RequestContext.java:903)〜[spring-webmvc-5.0.7.RELEASE.jar:5.0.7 。发布]
错误5是因为百里香无法找到“ goodNightOfSleep”属性。
尝试在get请求的model属性中传递StartDay对象。
@GetMapping("/normal/start-dag")
public String opretGoal(Model model){
model.addAttribute("startDay", new startDay());
return "normal/start-dag";
}
并确保在用户界面中定义了startDay“ th:object”。
<form th:action="@{normal/start-dag}" th:object="${startDay}" method="post">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.