Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将复选框用于Java+;Thymeleaf/HTML中的Spring?_Java_Spring_Spring Boot_Checkbox_Thymeleaf - Fatal编程技术网

如何将复选框用于Java+;Thymeleaf/HTML中的Spring?

如何将复选框用于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

如何从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 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

  • java.lang.IllegalStateException:bean名称“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.RELEASE]
  • 错误5是因为thymeleaf无法找到“goodNightOfSleep”属性

    尝试在get请求的模型属性中传递StartDay对象

    @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>