首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将多个对象从模板映射到控制器

如何将多个对象从模板映射到控制器
EN

Stack Overflow用户
提问于 2012-01-22 13:44:47
回答 1查看 173关注 0票数 0

我有一个带有输入框的模板,每一行代表一个模型对象。我不知道在我的控制器中映射它的最好方法是什么。

代码语言:javascript
运行
复制
  #{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个对象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-22 16:18:52

在您的模板中,您可以这样做:

代码语言:javascript
运行
复制
#{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方法将如下所示:

代码语言:javascript
运行
复制
public static void save(List<Integer> january, List<Integer> february, List<Integer> march) { ... }

您不需要做任何特殊的事情来将模板中的字段映射到控制器。Play会将名称(例如,一月、二月、三月)映射到控制器中的参数名称。

您可以像这样创建一个对象,而不是将单个月份作为操作方法的参数:

代码语言:javascript
运行
复制
public class Target {
    private int january;
    private int february;
    private int march;

    ...
}

然后,模板将如下所示:

代码语言:javascript
运行
复制
#{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}

那么控制器将会是这样的:

代码语言:javascript
运行
复制
public static void save(List<Target> targets) { ... }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8959277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档