GRAILS g:form的放置会影响传递给控制器​​的参数

时间:2014-08-26 23:43:46

标签: ajax grails

我有一个HTML表,其中包含可以为每行更新的表单字段。在每行中,我创建了一个表单,当您更改可编辑字段时,将出现一个按钮,您可以保存更改。这是使用GRAILS g:submitToRemote标记远程发生的。

我有一些隐藏的字段也需要传递。

当我执行以下操作时,没有任何字段(3个隐藏字段,也没有单个可见字段)通过控制器:

<g:form action="updatebaseprice" id="${obj.id}" name="form_${obj.id}">
<tr>
    <td>${prod.product.name}</td>
    <td class="text-center">${prod.product.type}</td>
    <td class="text-center"><g:formatNumber number="${prod.product.unitCost}" type="currency" currencyCode="USD" /></td>

    <td class="text-center">
        <div class="row collapse">
    <div class="small-3 columns">
      <span class="prefix radius">$</span>
    </div>
    <div class="small-9 columns">
      <g:field type="text" class="bemt_small_input_field" value="${prod.basePrice}" id="basePrice_${prod.id}" name="basePrice" onchange="Project.updateBasePrice(${prod.id});" maxlength="6"/>
    </div>
  </div>                                                            
    </td>
    <td class="text-center"><span id="display_recoveryPercent_${prod.id}"><g:formatNumber number="${prod.recoveryPercent}" type="number" minFractionDigits="2" maxFractionDigits="2"/></span>%</td>
    <td class="text-center">
        <g:hiddenField name="projectProduct" value="${prod.id}"></g:hiddenField>
        <g:hiddenField name="unitCost" id="unitCost_${prod.id}" value="${prod.product.unitCost}"></g:hiddenField>
        <g:hiddenField name="recoveryPercent" id="recoveryPercent_${prod.id}" value="${prod.recoveryPercent}"></g:hiddenField>
    <g:submitToRemote id="save_button_${prod.id}" class="hidden button alert save_unitprice radius" id="save_button_${prod.id}" url="[action: 'updatebaseprice']" onSuccess="Project.saveBasePrice();" value="Save"/>                                   
    </td>
</tr></g:form>

在控制器中使用println参数,打印没有任何内容。

当我执行以下操作时:

<tr>
<td>${prod.product.name}</td>
<td class="text-center">${prod.product.type}</td>
<td class="text-center"><g:formatNumber number="${prod.product.unitCost}" type="currency" currencyCode="USD" /></td>

<td class="text-center">
    <div class="row collapse">
  <div class="small-3 columns">
    <span class="prefix radius">$</span>
  </div>
  <div class="small-9 columns">
    <g:field type="text" class="bemt_small_input_field" value="${prod.basePrice}" id="basePrice_${prod.id}" name="basePrice" onchange="Project.updateBasePrice(${prod.id});" maxlength="6"/>
  </div>
</div>                                                          
</td>
<td class="text-center"><span id="display_recoveryPercent_${prod.id}"><g:formatNumber number="${prod.recoveryPercent}" type="number" minFractionDigits="2" maxFractionDigits="2"/></span>%</td>
<td class="text-center">
<g:form action="updatebaseprice" id="${obj.id}" name="form_${obj.id}">
    <g:hiddenField name="projectProduct" value="${prod.id}"></g:hiddenField>
    <g:hiddenField name="unitCost" id="unitCost_${prod.id}" value="${prod.product.unitCost}"></g:hiddenField>
    <g:hiddenField name="recoveryPercent" id="recoveryPercent_${prod.id}" value="${prod.recoveryPercent}"></g:hiddenField>
<g:submitToRemote id="save_button_${prod.id}" class="hidden button alert save_unitprice radius" id="save_button_${prod.id}" url="[action: 'updatebaseprice']" onSuccess="Project.saveBasePrice();" value="Save"/>                                   
</g:form>
</td>

我得到三个隐藏的参数(如例外),但不是表格上方的输入(我不指望它,因为它在表格之外)。我的问题是,为什么第一种方式不返回任何东西,当我希望它将三个隐藏的和一个可见字段值作为参数返回时?

由于

1 个答案:

答案 0 :(得分:0)

问题是您正在尝试将表单嵌套在html表结构中。

正如您所知,您可以在单个表格单元格中放置一个表单,但尝试在表单中放置表格行不会起作用。

有关更多信息,请参阅此问题:Form inside a table