Привязка коллекции переменных в шаблоне Velocity с поддержкой Spring - PullRequest
0 голосов
/ 16 августа 2011

Предположим, у меня есть следующий объект поддержки формы для шаблона Velocity 1.5:

public class Bucket {

    String data1;
    String data2;
    String data3;
    String data4;

    // getters setters blah blah...
}

Я бы хотел связать эти четыре атрибута String со следующим java.util.Map из Strings, внутри четырех выпадающих элементов управления select:

"a" : "1"
"b" : "2"
"c" : "3"
"d" : "4"

Если внутри модели контроллера моей страницы я называю объект поддержки «boData», а карту значений «labelKeys», скорость может связать свойства объекта поддержки:

#springFormSingleSelect( "boData.data1" $labelKeys "")
#springFormSingleSelect( "boData.data2" $labelKeys "")
#springFormSingleSelect( "boData.data3" $labelKeys "")
#springFormSingleSelect( "boData.data4" $labelKeys "")

Однако есть ли способ избежать вызова #springFormSingleSelect четыре раза? Я имею в виду, что здесь есть шаблон, но я не вижу способа выразить его в терминах Velocity.

Если, например, я определил вместо этого эти четыре атрибута String внутри класса Bucket как массив Java или как java.util.List, как я могу определить скорость, с которой мне нужно связать раскрывающийся элемент управления select для каждого элемента? в списке?

public class Bucket {
    List<String> dataItems = new ArrayList<String>();
    // getter, setter...
}

Я благодарю вас за любую информацию, которую вы можете предоставить!

Ответы [ 3 ]

4 голосов
/ 01 ноября 2012

Я не уверен, был ли ответ ясен. Пытаюсь объяснить Привязка скорости пружины требует всего пути в качестве аргумента для #springBind Так что если у вас есть коллекция dataItems, вы не можете связать как

    #foreach($dataItem in $dataItems)
      #springFormSingleSelect( "dataItem.data1" $labelKeys "")
    #end

Вместо

    #set ($end = $dataItems.size() - 1)
    #foreach($i in [0..$end])
      #springFormSingleSelect( "dataItems[$i].data1" $labelKeys "")
    #end

Это связало бы элементы коллекции.

0 голосов
/ 16 августа 2011

Как насчет:

#foreach($i in [1..4])
    #set($field = "boData.data" + $i)
    #springFormSingleSelect($field $labelKeys "")
#end
0 голосов
/ 16 августа 2011

Не уверен, что понимаю вопрос. Но, похоже, все, что вам нужно, это foreach цикл. В Velocity вы также можете ввести java, если это облегчит вашу жизнь.

Однако вы можете сделать что-то вроде:

#set ($map = $myobject.getMap() )
#foreach ($mapEntry in $map.entrySet())
     // $mapEntry.key
     // $mapEntry.value
    #springFormSingleSelect( "boData.data1" $mapEntry.key "")
#end

Вы можете сделать то же самое со списком.

Надеюсь, это поможет. С уважением,

...