2010-07-10 3 views
1

В Spring 3 MVC документы утверждают, что опция теги могут быть оказаны как это:Spring MVC + FreeMarker: как отредактировать тег опции?

<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 так, что вышеупомянутые работы?

Спасибо.

ответ

1

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

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

Надеется, что это помогает!

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" /> 

НТН

1

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

  • удалить $ { "места"} и использовать его в качестве места straigh
  • удалить Itemid и пусть пружинный ручку это для вас

так что вы будете иметь

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

</@form.select> 
Смежные вопросы