Как отобразить несколько объектов из шаблона в контроллер - PullRequest
0 голосов
/ 22 января 2012

У меня есть шаблон с таблицей ввода, где каждая строка представляет объект модели.Я не могу понять, как лучше всего отобразить это в моем контроллере.

  #{form id:'targetsForm', method:'POST', action:@createTargets()}
      <table  id="targetsTable">
      <tr>
        <th>Name</th>
        <th>January</th>
        <th>February</th>
        <th>March</th>
      </tr>
      <tbody>
        <tr>
        <td class="center" id="object2">Object1</td>
        <td class="center"><input id="01-jan" type="number" name="01-jan" size="20" value="" class="target-input" /></td>
        <td class="center"><input id="01-feb" type="number" name="01-feb" size="20" value="" class="target-input" /></td>
        <td class="center"><input id="01-mar" type="number" name="01-mar" size="20" value="" class="target-input" /></td>
        </tr>
        <tr>
        <td class="center" id="object2">Object2</td>
        <td class="center"><input id="02-jan" type="number" name="02-jan" size="20" value="" class="target-input" /></td>
        <td class="center"><input id="02-feb" type="number" name="02-feb" size="20" value="" class="target-input" /></td>
        <td class="center"><input id="02-mar" type="number" name="02-mar" size="20" value="" class="target-input" /></td>
        </tr>
      </tbody>
      </table>
  #{/form}

Как я могу отобразить объект 1 и объект 2 в маршрутах и ​​контроллере, знать, что может быть n объектовв форме?

1 Ответ

3 голосов
/ 22 января 2012

В вашем шаблоне вы можете сделать что-то вроде этого:

#{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) { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...