使用webflow和grails创建动态表

时间:2013-10-09 12:44:50

标签: grails groovy spring-webflow

我正在尝试在一个页面上创建一个包含动态表的Webflow。看起来像这样

 def startFlow = {

    contact {
        on('next') {
            flow.developer = params.developer
            flow.project = params.project
            flow.division = params.division
            flow.projectResponsible = params.projectResponsible
            flow.email = params.email

            [flow : flow]
        }.to('ipcount')
        on('cancel').to('finish')
    }
    ipcount{
        on('next'){
            flow.ipcount = params.int('ipcount')

            [flow: flow]
        }.to('systems')
        on('cancel').to('finish')
    }
    systems{
        on('next') {
            flow.hoster= params.hoster
            flow.ip = params.ip
            flow.os = params.os
            flow.dns = params.dns
            flow.systemDate = params.systemDate

            [flow : flow]
        }.to('url')
        on('cancel').to('finish')
    } ....

问题是我的系统数量每次都可能不同(1 ... n)。 一个想法是在应该创建多少条目之前询问页面(ipcount)。

我的观点看起来像这样

  <g:set var="count" value="${flow.ipcount}" />
                 <g:each in="${(1..'${count}')}">
                  <tr class="prop">
                    <td valign="top" class="name">
                        <label for="ip">IP Adresse:</label>
                    </td>
                   <td valign="top">
                    <td valign="top" class="value ${hasErrors(bean:hosterInstance,field:'ip','errors')}">
                        <input type="text" id="ip" name="ip" value="${params.ip}" />
                    </td>
                    <td valign="top" class="name">
                        <label for="dns">DNS:</label>
                    </td>
                    <td valign="top">
                        <input type="text" id="dns" name="dns" value="${params.dns}" />
                    </td>
                    <td valign="top" class="name">
                        <label for="os">Operating System:</label>
                    </td>
                    <td valign="top">
                        <input type="text" id="dns" name="dns" value="${params.os}" />
                    </td>
                </tr>
               </g:each>

除此之外,这不起作用,因为我得到一个内部服务器错误:( java.lang.String不能转换为java.lang.Integer)如果我可以在页面上动态地在表行,它会更好。 这是一个问题:这可能与webflow有关吗?特别是我不知道如何处理流参数以及如何将收集的条目保存在Webflow的末尾到数据库。

1 个答案:

答案 0 :(得分:2)

如果您需要使用对象列表,command objects是可行的方法。它支持来自传入请求的数据绑定,并将处理列表。

您可以查看a related question,告诉您该怎么做。

在您看来,您需要在输入名称中处理索引。例如:

考虑

class System {
  String ip
  String dns
  ...
}

commandInstance.systems一个List<System>

<g:each in="${commandInstance.systems}" var="command" status="i">

  <input type="text" id="ip$i" name="systems[$i].ip" value="${command.ip}" />

</g:each>