В вашем шаблоне вы можете сделать что-то вроде этого:
#{form @createTargets()}
#{field 'january[0]'}
<input type="number" name="${field.name}" value=""/>
#{/field}
#{field 'february[0]'}
<input type="number" name="${field.name}" value=""/>
#{/field}
#{field 'march[0]'}
<input type="number" name="${field.name}" value=""/>
#{/field}
#{field 'january[1]'}
<input type="number" name="${field.name}" value=""/>
#{/field}
#{field 'february[1]'}
<input type="number" name="${field.name}" value=""/>
#{/field}
#{field 'march[1]'}
<input type="number" name="${field.name}" value=""/>
#{/field}
#{/form}
И тогда в вашем контроллере ваш метод createTargets будет выглядеть так:
public static void save(List<Integer> january, List<Integer> february, List<Integer> march) { ... }
Вам не нужно делать ничего особенного, чтобы отобразить поля из шаблона в контроллер. Play отобразит имена (то есть январь, февраль, март) на имя параметров в контроллере.
Вместо использования отдельных месяцев в качестве параметров в методе действия, вы можете создать объект, подобный этому:
public class Target {
private int january;
private int february;
private int march;
...
}
И тогда шаблон будет выглядеть так:
#{form @createTargets()}
#{field 'targets[0].january'}
<input type="number" name="${field.name}" value=""/>
#{/field}
#{field 'targets[0].february'}
<input type="number" name="${field.name}" value=""/>
#{/field}
#{field 'targets[0].march'}
<input type="number" name="${field.name}" value=""/>
#{/field}
#{field 'targets[1].january'}
<input type="number" name="${field.name}" value=""/>
#{/field}
#{field 'targets[1].february'}
<input type="number" name="${field.name}" value=""/>
#{/field}
#{field 'targets[1].march'}
<input type="number" name="${field.name}" value=""/>
#{/field}
#{/form}
Тогда контроллер будет просто так:
public static void save(List<Target> targets) { ... }