Thymeleaf - Spring MVC。使用布尔和复选框形成支持bean

时间:2015-07-07 22:06:17

标签: java spring spring-mvc thymeleaf

Iam尝试使用百里香叶将一个简单的形式发布到弹簧控制器上。支持bean包含一个布尔值,该值使用th:object标记内的th:字段映射到模板中的复选框。当我看一下渲染的html DOM时,spring mvc正在添加一个隐藏的输入字段,其名称为_attributeName。主输入字段的名称生成为attributeName。现在当Iam尝试发布表单时,它会以400中止,因为请求参数_attributeName不能映射到支持bean对象(根本就不存在)。所以另外请求wohld包括attributeName和_attributeName。为什么会这样?

2 个答案:

答案 0 :(得分:2)

所以我终于解决了它。问题是,我使用boolean而不是Boolean,而我的getter命名为isEnabled而不是getEnabled。这似乎导致了表单元素和辅助bean之间映射的问题。

答案 1 :(得分:-2)

尝试过Vinc提及的解决方案,但对我不起作用。但是下面对我有用。

控制器

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