Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何映射对象列表以进行编辑和保存_Java_Groovy_Controller_Mapping_Playframework - Fatal编程技术网

Java 如何映射对象列表以进行编辑和保存

Java 如何映射对象列表以进行编辑和保存,java,groovy,controller,mapping,playframework,Java,Groovy,Controller,Mapping,Playframework,我试图编辑一个实体列表,然后更新或创建它们。 在我的控制器中,我有: public static void editTargets(@Required @Min(2011) Integer year, @Required String type, @Required Long groupId) { RetailRegion region = RetailRegion.findById(groupId); notFoundIfNull(region); TargetType

我试图编辑一个实体列表,然后更新或创建它们。 在我的控制器中,我有:

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();
}
public static void editTargets(@Required@Min(2011)整数年,@Required String type,@Required Long groupId){
RetailRegion=RetailRegion.findById(groupId);
notFoundIfNull(区域);
TargetType tType=TargetType.valueOf(类型);
notFoundIfNull(tType);
列出目标=Target.findByGroupAndTypeAndYear(地区、类型、年份);
if(targets!=null&&!targets.isEmpty()){
渲染(目标、年份、类型、区域);
}
createTargets(年份、类型、组ID);
}
公共静态void createTargets(@Required@Min(2011)整数年,@Required字符串类型,@Required Long groupId){
RetailRegion=RetailRegion.findById(groupId);
notFoundIfNull(区域);
TargetType tType=TargetType.valueOf(类型);
notFoundIfNull(tType);
渲染(区域、年份、t类型);
}
公共静态void saveTargets(@必需列表目标){
notFoundIfNull(目标);
针对(目标:目标){
如果(目标!=null)
target.save();
}
flash.success(“目标已保存”);
if(params.get(“\u save”)!=null){
管理();
}
管理();
}
和我的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>
          ...
#{表单id:'targetsForm',方法:'POST',操作:@saveTargets()}
代码
一月
%{int i=0;}%
#{列出项目:目标,如:'target'}
#{field'target.id'}
#{/field}
${targets[i].code}
#{field'target.jan'}
#{/field}
...
我的问题是,我似乎无法在saveTargets控制器方法中映射回已编辑的目标

控制器将字段映射回每个字段的字符串数组(即target.jan-->String[]),而不是列表


有没有办法将我的对象映射回列表?

您似乎在视图中循环遍历目标,因此字段标记应该包含它们位于列表/数组中的事实。有趣的是,target.jan以字符串数组的形式出现。我认为您的字段标记应该如下所示:

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

以上是针对“jan”属性的,因此您必须对视图中的任何其他目标属性(例如id)执行相同的操作。

我现在正在执行类似的操作,它“几乎可以”处理35;{列表项:目标,如:'target'}我说,当字段在目标列表中正确映射时,几乎可以正常工作。由于某些原因,只有id没有被映射,这有点烦人,因为这是更新模型的关键。有什么想法吗?你用我在回答中提供的代码试过了吗?如果是,那么发生了什么?