hibernate Thymeleaf + Spring MVC中的绑定复选框

brc7rcf0  于 2023-08-06  发布在  Spring
关注(0)|答案(4)|浏览(149)

我的Spring MVC应用程序基于Sping Boot 1.2.8,Thymeleaf,Hibernate和Hateos。我有一个实体“市场”与一个领域“启用”类型布尔。

@Entity
@Table(name = "market")
public class Market {
.....
private Boolean enabled;
....
public Boolean getEnabled() {
        return enabled;
    }

    public void setEnabled(Boolean enabled) {
        this.enabled = enabled;
    }
}

字符串
在控制器中为“/create”编写代码

@RequestMapping(value = "/create", method = RequestMethod.GET)
public ModelAndView create() {
    return new ModelAndView("market/create")
            .addObject("list", linkTo(methodOn(MarketController.class).list())
                    .withRel("List"))
            .addObject("market", new Market())
            .addObject("postLink",
                    linkTo(methodOn(MarketController.class).save(null, null, null, null))
                            .withRel("Save"));
}


模板“market/create”,参考http://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html#checkbox-fields

<form th:action="${postLink.href}" th:object="${market}" method="post">
        ....
        <div class="form-group">
            <label th:for="${#ids.next('enabled')}" th:text="#{market.enabled}">Enabled</label>
            <input type="checkbox" th:field="*{enabled}" />
        </div>
        ....
    </form>


当在浏览器中打开/markets/create时,在带有复选框的行上显示以下异常

Cause: org.thymeleaf.exceptions.TemplateProcessingException Attribute "value" is required in "input(checkbox)" tags when binding to non-boolean values


为什么Thymeleaf将字段“enabled”视为非布尔类型?我已尽了最大的努力去找出原因,但没有成功。请给予一些提示来解决它。- 谢谢-谢谢

deyfvvtc

deyfvvtc1#

控制器

@Controller
public class BaseController {

    @GetMapping("/")
    private String index(DemoDto demoDto){
        return "index";
    }

    @PostMapping("/")
    private String receiveValues(DemoDto demoDto) {
        System.out.println(demoDto);
        return "index";
    }

}

字符串

DTO

public class DemoDto {
    private String name;
    private boolean global;

    //getter setter for name

    public boolean isGlobal() {
        return global;
    }
    public void setGlobal(boolean global) {
        this.global = global;
    }

    //toString()
}

HTML

<body>
    <form th:action="@{/}" th:method="post" th:object="${demoDto}">
        <label>Enter Name:</label> 
            <input type="text" th:field="*{name}" name="name"> 
        <br/>
        <label>Global</label>
            <input type="checkbox" th:field="${demoDto.global}"/>
        <input type="submit" value="Submit">
    </form>

</body>


这里最重要的是如何定义th:field="${demoDto.global}"。这里需要$和对象名称demoDto
生成的html代码将是。

<body>
    <form action="/" method="post">
        <label>Enter Name:</label> 
            <input type="text" name="name" id="name" value=""> 
        <br/>
        <label>Global</label>
            <input type="checkbox" id="global1" name="global" value="true"/>
            <input type="hidden" name="_global" value="on"/>
        <input type="submit" value="Submit">
    </form>

</body>


当从ui收到提交时:

DemoDto [name=Dev, global=true]

pexxcrt2

pexxcrt22#

在任何情况下,属性value都是必需的。
试试这样的方法:<input type="checkbox" th:field="*{enabled}" value="true" />enabled字段应该在检查输入时由true设置; null否则。

8zzbczxx

8zzbczxx3#

尝试将您的属性命名为“启用”以外的名称,例如“市场启用”。

d6kp6zgx

d6kp6zgx4#

<input type="checkbox" th:field="*{enabled}" value="true" />

字符串
当我们选中复选框输入时,它将该复选框的值设置为“true”。这在我的情况下工作得很好。

相关问题