我有一个绑定到Spring模型的HTML表单来接收用户数据并将其添加到数据库中。这很好用。我已经使用Spring Freemarker宏来为字段在发送之前进行输入和验证,例如
<@spring.formInput path="myForm.username"/>
<@spring.showErrors ", "/>
这也适用于文本输入。导致我出现问题的是使用Spring宏渲染多个复选框。我原来的HTML是:
<input name="roleList" type="checkbox" value="1"/>Adminstrator
<input name="roleList" type="checkbox" value="2"/>Developer
<input name="roleList" type="checkbox" value="3"/>Customer
我创建了一个Java Map<String, String>
这个信息,我的控制器方法中的键为“1”,“2”,“3”并将其添加到模型中,然后用我的宏替换HTML ftl模板:
<@spring.formCheckboxes path="quickForm.roleList" options="${roleMap}" separator="<br>"/>
但是我收到了错误
Expecting a string, date or number here, Expression roleMap is instead a freemarker.template.SimpleHash
如果需要地图,为什么会给出该消息? (如在Spring Docs for FreeMarker宏中)任何人都可以解释我应该如何提供复选框数据?
答案 0 :(得分:3)
最后解决了这个问题,所以对于任何感兴趣的人来说:它不像创建值的HashMap并用model.addAttribute("roleMap", myHash)
添加它们那么简单 - 我必须创建一个服务类来代替它:它从数据库表中检索我的角色列表,然后将它们转换为HashMap<String, String>
。然后我在我的控制器方法中调用它,将它添加到我的模型(此处称为“roleMap”)并在我的FreeMarker模板中使用它而不用通常的格式,如下所示:
<@spring.formCheckboxes path="quickForm.roleList" options=roleMap separator="<br>"/>
将数据转换为服务方法是Spring将其用作复选框选项的关键。