grails - 如何在Grails GSP中保存复合字段值?

标签 grails composite gsp

我有一个复合域对象,如下所示:

class Person 
{
    static embedded = ['forSale']
    Boolean isSelling
    House forSale
}

class House 
{
    Integer numBedrooms
}

我有一个numBedrooms的选择控件,如下所示:
<tr class="prop">
 <td valign="top" class="name">
   <label for="numBedrooms"><g:message code="person.numBedrooms.label" default="Num Bedrooms" /></label>
 </td>
 <td valign="top" class="value ${hasErrors(bean: personInstance, field: 'forSale.numBedrooms', 'errors')}">
     <g:select name="numBedrooms" value="${fieldValue(bean: personInstance, field: 'forSale.numBedrooms')}" 
          noSelection="${['null':'Select a number...']}"
      from="${1..6}"
     />
 </td>
</tr>

请注意,我正在选择的fieldValue中使用forSale.numBedrooms。我无法生成脚手架的代码来查看应该如何完成,因为由create-views生成的create View 不包含对forSale House对象中字段的引用。

我也无法提供通过GSP访问的复合字段的任何示例,因此这有点猜测。在任何情况下,GSP页面的呈现均无错误,尽管这可能是因为我无法保存任何数据。

我将numBedrooms的值作为URl查询字符串的一部分发回...

&numBedrooms = 2

当我这样做时, Controller 中的保存代码会静默失败-至少没有任何内容写入数据库。我已经打开了调试日志记录的几乎所有内容,但日志中没有任何消息表明任何错误,尽管显然是错误的。

如果我从查询字符串中删除numBedrooms参数,那么保存将照常进行,因此我猜测这与解析numBedrooms有关。

有什么提示我做错了什么以及我可以做些什么来找出问题所在?

最佳答案

我要做的是generate-all域的House,然后复制并粘贴GSP代码,并在完成后删除文件。我还发现在以后使用House域的情况下,创建模板来编辑House域更聪明。

对于您的GSP,您需要这样的内容(请注意name属性)

<tr class="prop">
 <td valign="top" class="name">
   <label for="forSale.numBedrooms"><g:message code="house.numBedrooms.label" default="Num Bedrooms" /></label>
 </td>
 <td valign="top" class="value ${hasErrors(bean: personInstance.forSale, field: 'numBedrooms', 'errors')}">
     <g:select name="forSale.numBedrooms" value="${fieldValue(bean: personInstance.forSale, field: 'numBedrooms')}" 
          noSelection="${['null':'Select a number...']}"
      from="${1..6}"
     />
 </td>
</tr>

在您的参数字符串中,您需要*forSale*.numBedrooms=2。此代码将与person.properties = paramsnew Person(params)一起使用。

嵌入的“指令”仅告诉Hibernate在同一表中包括参数,它们仍然是单独的Domain类。即使您可能永远不会使用它,它也可能会为该域生成一个表。

希望这可以帮助。

关于grails - 如何在Grails GSP中保存复合字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2123871/

相关文章:

grails - 如何在 Grails 应用程序中运行 Geb 测试套件

xml - PDF导出在Grails 2.3.2中不起作用

Java:复合

javascript - 如何发送下拉项的值到导出插件?

grails - 参数作为 Groovy 字符串而不是对象返回

grails - 将参数传递给Grails自定义验证器

session - Grails在Service类中获得Session和Management

C#、CaSTLe Windsor 和复合设计模式

components - 用于基于组件(或复合)的 Web 应用程序的 OpenRasta 框架

grails - Grails 3.3.2访问自定义元约束