Spring MVC + FreeMarker: как отобразить опцию тега? - PullRequest
1 голос
/ 10 июля 2010

Документация 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

Что я должен использовать вместо $ {place} в моем шаблоне FreeMarker, чтобы вышеописанное работало?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 08 ноября 2010

Я искал точно то же самое. Я понятия не имею, почему это не включено в библиотеку макросов 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" />

НТН

1 голос
/ 03 июня 2013

немного странно, но это работает.

  • удалите $ {"местах"} и используйте его как место
  • удалите предмет и позвольте пружине обработать его для вас

так у вас будет

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

</@form.select>
1 голос
/ 15 июля 2010

Вы можете попробовать следующее (не проверено лично)

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

Надеюсь, это поможет!

...