也许这个问题很愚蠢,但对我来说并非如此。问题是,如果我使用原语boolean
并像这样添加到modelAttribute
字段中:
model.addAttribute("searchForTrailers", false);
然后我尝试在视图中更改它,Thymeleaf
如下所示:
<select th:object="${searchForTrailers}">
<option th:value="false">Машины</option>
<option th:value="true">Прицепы</option>
</select>
然后我得到一个错误:
java.lang.IllegalStateException: No primary or single unique constructor found for boolean
如果我使用一个对象Boolean
并像这样放置它:
model.addAttribute("searchForTrailers", Boolean.valueOf(false));
然后我得到同样的错误。
毕竟,据我了解,为了更改值,理论上我应该th:field
访问该对象的字段Boolean
,因为Boolean
根据文档有两个常量字段:FALSE
和TRUE
,事实证明在访问时阶段我应该已经知道应该选择什么值,然后整个意义就消失了。
也许我误解了您使用这个布尔变量的逻辑,但是尽管如此,在评论中我想到了一个解决方案,我将在这里更详细地描述。
让我们创建一个包含布尔变量的类:
(lombok 注释可以用常规构造函数和 getter-setter 替换)
然后,在显示使用您提供的页面的控制器中
select
,我们将在其他属性中添加我们的空容器对象:也就是说,我们通过类比我们通常如何将空对象传递给视图,然后接收它们来填充。例如,在某种注册过程中。
然后输出 HTML 页面的代码应包含如下形式:
然后,当用户选择该选项并单击提交按钮时,您在将编写用于处理指定 URL 处的 post 请求的控制器中,将能够从此对象中检索选定的布尔字段。准备好。
如果这是某种配置选项,那么将其保存在会话中可能会很有趣,以便用户之前的选择将应用于后续请求。同时,您可以将容器对象及其字段的实际值放置在会话中,因为原则上,这是您唯一感兴趣的事情。