如何将复选框用于Java+;Thymeleaf/HTML中的Spring?
如何从html中的复选框接收true或false,并将Thymeleaf传递到我的控制器,以便获取true或false值并保存在我的数据库中。到目前为止,我收到了以下错误:如何将复选框用于Java+;Thymeleaf/HTML中的Spring?,java,spring,spring-boot,checkbox,thymeleaf,Java,Spring,Spring Boot,Checkbox,Thymeleaf,如何从html中的复选框接收true或false,并将Thymeleaf传递到我的控制器,以便获取true或false值并保存在我的数据库中。到目前为止,我收到了以下错误: My StartDay.java类: @Entity @Table(name = "start_day") public class StartDay { @Id @Column(name = "age_in_days", nullable = true) private int ageInDay
@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:字段,它看起来像这样:
<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>
<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>
你能告诉我你的名字吗?
这使我实际上能够在页面上登陆,但我的复选框看起来像这样,并且没有返回值:您是否尝试返回
ModelAndView
而不是字符串
,并将StartDay
添加为所述的Model属性
e、 g
@GetMapping("/normal/start-dag")
public String opretGoal(Model model){
model.addAttribute("startDay", new startDay());
return "normal/start-dag";
}
并确保在UI中定义了startDay“th:object”
<form th:action="@{normal/start-dag}" th:object="${startDay}" method="post">
控制器方法:
模板片段:
...
...
您也可以使用th:字段作为goodNightOfSleep输入,但其工作原理与上面的writen类似。Thymeleaf按名称将字段与表单元素中定义的对象匹配。如果选中该框,则该值为真,否则为假
要点是1.)将对象添加到模型中,2.)将对象作为输入参数接收
警告:代码未经测试即写入编辑器。可能有打字错误。我想你的标签末尾少了一条斜线@pDer666:这是有效的html5语法。只是添加了它-没有任何更改,但非常感谢:)好的,是否应该有一个“是”和“否”复选框?目前,您将第一个输入字段中的th:path和第二个输入字段中的th:field组合在一起没有多大意义。@Mongo:我写了一个小示例。等几分钟(我在工作,我的老板对工作中的私事很挑剔),这不是为了展示一个对象的价值观吗?我只是通过@ModelAttribute添加StartDay,然后我应该通过我的表单填充值,然后返回StartDay对象,然后将其保存到我的数据库中。我被告知使用RequestMapping是使用Spring的一种老方法,因为我们有GetMapping和PostMapping。还是我错了谢谢你的时间!哦,这与get/postmapping无关,get/postmapping只是编写requestmapping(method=get)/requestmapping(method=POST)的一种较短的方法哦,好吧!我刚刚尝试了你的代码,但它不起作用,因为我的
StartDayService.createGoalOfTheDay(startDay))代码>返回无效,因此它不允许我。它是纯sql(INSERT-INTO)。啊,好吧,“GET”是返回这个异常还是您的“POST”?也许你必须将模型添加到你的“GET”中-更新了我对matchSo的答案-是的,这很有效-现在它返回true或false(如果选中或取消选中),但我仍然遇到标签问题,显示了与假设完全不同的内容。好吧,这很有效-我现在收到true或false,但是我的复选框仍然显示标签中的错误文本。你知道如何解决这个问题吗?好的,这完全解决了所有问题,现在我只需要让我的sql与数据库一起工作。谢谢你的帮助,真的很感激!
<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";
}
@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;
<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 ModelAndView opretGoal(){
ModelAndView mav = new ModelAndView("normal/start-dag");
mav.addObject("StartDay", new StartDay());
return mav;
}
@GetMapping("/normal/start-dag")
public String opretGoal(Model model){
model.addAttribute("startDay", new startDay());
return "normal/start-dag";
}
<form th:action="@{normal/start-dag}" th:object="${startDay}" method="post">
@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>