Как отобразить список объектов для редактирования и сохранения - PullRequest
0 голосов
/ 25 января 2012

Я пытаюсь отредактировать список объектов и обновить или создать их впоследствии. В моем контроллере у меня есть:

public static void editTargets(@Required @Min(2011) Integer year, @Required String type, @Required Long groupId) {
    RetailRegion region = RetailRegion.findById(groupId);
    notFoundIfNull(region);
    TargetType tType = TargetType.valueOf(type);
    notFoundIfNull(tType);

    List<Target> targets = Target.findByGroupAndTypeAndYear(region, tType, year);

    if (targets != null && !targets.isEmpty()) {
        render(targets, year, tType, region);
    }
    createTargets(year, type, groupId);
}

public static void createTargets(@Required @Min(2011) Integer year, @Required String type, @Required Long groupId) {
    RetailRegion region = RetailRegion.findById(groupId);
    notFoundIfNull(region);
    TargetType tType = TargetType.valueOf(type);
    notFoundIfNull(tType);

    render(region, year, tType);
}

public static void saveTargets(@Required List<Target> targets) {
    notFoundIfNull(targets);

    for (Target target : targets) {
        if (target != null)
            target.save();
    }

    flash.success("Targets have been saved.");
    if (params.get("_save") != null) {
        mgmt();
    }
    mgmt();
}

и мой шаблон editTargets:

  #{form id:'targetsForm', method:'POST', action:@saveTargets()}
  <section id="targets">
    <table  width="750px" id="targetsTable">
      <thead>
      <tr>
        <th>Code</th>
        <th>January</th>
      </tr>
      </thead>
      <tbody>
        %{int i = 0;}%
        #{list items:targets, as:'target'}
        <tr>
          #{field 'target.id'}
            <input id="${field.id}" type="hidden" name="${field.name}" value="${field.value}" class="${field.errorClass}" />
          #{/field}
          <td class="center">${targets[i].code}</td>
          <td class="center">
          #{field 'target.jan'}
            <input id="${field.id}" type="number" name="${field.name}" value="${field.value}" class="${field.errorClass}" />
          #{/field}
          </td>
          ...

Проблема в том, что я не могу отобразить отредактированные цели в методе контроллера saveTargets .

Контроллер отобразит поля обратно в массив String для каждого поля (то есть target.jan -> String []) вместо List <Targets>.

Есть ли способ отобразить мой объект обратно в список?

1 Ответ

1 голос
/ 25 января 2012

Похоже, вы просматриваете цели в вашем представлении, поэтому ваши теги полей должны включать тот факт, что они находятся в списке / массиве.Интересно, что target.jan каким-то образом появляется как массив String.Я думаю, что ваш тег поля должен выглядеть примерно так:

%{ fieldName = "target[${i}].jan" }%
#{field "${fieldName}"}
    ...
#{/field}

Выше приведено для свойства 'jan', поэтому вам придется сделать то же самое для любых других целевых свойств, которые вы имеете в представлениинапример, id)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...