1

Spring 3 MVC 文档声明选项标签可以这样呈现:

<tr>
      <td>Country:</td>
      <td>
          <form:select path="country">
              <form:options items="${countryList}" itemValue="code" itemLabel="name"/>
          </form:select>
      </td>
</tr>

我将 FreeMarker 与 Spring MVC 一起使用,因此我将其解释为:

<tr>
    <td>Place:</td>
    <td>
        <@form.select path="place">
            <@form.options items="${places}" itemValue="id" itemLabel="name"/>

        </@form.select>
    </td>
</tr>

当我点击页面时,出现以下异常:

freemarker.core.NonStringException: Error on line 40, column 73 in event.ftl
Expecting a string, date or number here, Expression places is instead a freemarker.template.SimpleSequence

我应该在我的 FreeMarker 模板中使用什么来代替 ${places} 以便上述工作?

谢谢。

4

3 回答 3

2

我一直在寻找完全相同的东西。我不知道为什么它不包含在 Spring 的 Freemarker 宏库中,但幸运的是它很容易实现:最佳实践是启动你自己的宏库(mylib.ftl例如)并将宏放在那里:

<#macro selectOptions path options key value>
  <@spring.bind path/>
  <select id="${spring.status.expression}" name="${spring.status.expression}">
    <#list options as option>
      <option value="${option[key]?html}"<@spring.checkSelected option[key]/>>${option[value]?html}</option>
    </#list>
  </select>
</#macro>

然后,您可以在 Freemarker 模板中使用新宏,如下所示:

<#import "/mylib.ftl" as mylib />
...
<@mylib.selectOptions "country" countryList "code" "name" />

高温高压

于 2010-11-08T15:46:23.520 回答
1

您可以尝试以下(未经个人测试)

<@form.select path="place">
    <#list Request.places as place>
       <@form.option value="${place}" label="name" />
    </#list>
</@form.select>

希望这可以帮助!

于 2010-07-15T15:13:57.290 回答
1

有点奇怪,但它有效。

  • 删除 ${"places"} 并将其直接用作地点
  • 移除 itemid 并让 spring 为您处理它

所以你会有

<@form.select path="place">
   <@form.options items=places itemLabel="name"/>

</@form.select>
于 2013-06-03T17:15:02.803 回答