【问题标题】:Freemarker Checkboxes input in Spring form以 Spring 形式输入的 Freemarker Checkboxes
【发布时间】:2014-01-06 22:02:18
【问题描述】:

我有一个绑定到 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&lt;String, String&gt;,键为“1”、“2”、“3”,并将其添加到模型中,然后在我的 ftl 模板中用此宏替换 HTML :

<@spring.formCheckboxes path="quickForm.roleList" options="${roleMap}" separator="<br>"/>

但我得到一个错误

Expecting a string, date or number here, Expression roleMap is instead a freemarker.template.SimpleHash

如果它需要地图,为什么会给出该消息? (如 FreeMarker 宏的 Spring Docs 中)谁能解释我应该如何提供复选框数据?

【问题讨论】:

    标签: spring spring-mvc freemarker


    【解决方案1】:

    终于解决了这个问题,所以对于任何感兴趣的人:它并不像创建一个值的 HashMap 并使用 model.addAttribute("roleMap", myHash) 添加它们那么简单 - 我必须创建一个服务类来代替:它检索了我的来自数据库表的角色列表,然后将它们转换为HashMap&lt;String, String&gt;。然后我在我的控制器方法中调用它,将它添加到我的模型(这里称为“roleMap”)并在我的 FreeMarker 模板中使用它没有通常的格式,像这样:

    <@spring.formCheckboxes path="quickForm.roleList" options=roleMap separator="<br>"/>
    

    在服务方法中转换数据是 Spring 将其用作复选框选项的关键。

    【讨论】:

    • 顺便提一下,我认为这里对实际问题的诊断是不正确的。我做了你描述的同样的事情,在我的控制器中创建地图并将它们添加到模型中,它工作正常,中间没有复杂的服务。我的猜测是这里的关键是从 options=${roleMap} 更改为 options=roleMap
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    相关资源
    最近更新 更多