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

如何在Grails GSP中保存复合字段值?,grails,composite,gsp,Grails,Composite,Gsp,我有一个复合域对象,如下所示: class Person { static embedded = ['forSale'] Boolean isSelling House forSale } class House { Integer numBedrooms } <tr class="prop"> <td valign="top" class="name"> <label for="numBedrooms"><

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

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

class House 
{
    Integer 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>
我有一个数字选择控件,如下所示:

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

class House 
{
    Integer 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>

请注意,我在select上的字段值中使用forSale.numberDrooms。我还不能为此生成框架代码来查看应该如何完成,因为创建视图生成的创建视图不包含对forSale House对象中字段的引用

我还没有找到任何通过GSP访问复合字段的例子,所以这只是一个猜测。在任何情况下,GSP页面呈现都没有错误,尽管这可能是因为我无法保存任何数据

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

&numberDrooms=2

当我这样做的时候,控制器中的保存代码会悄无声息地失败——至少没有任何东西被写入数据库。我已经打开了几乎所有的调试日志记录,但是我在日志中没有收到任何提示出错的消息,尽管有些事情显然是错误的

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


任何关于我做错了什么以及我能做些什么来追踪我的问题的线索吗?

我要做的是
House
域生成所有
,然后复制并粘贴GSP代码,并在完成后删除文件。我还发现,如果我以后使用
House
域,创建模板来编辑
House
域更为明智

对于GSP,您需要这样的东西(注意name属性)


在参数字符串中,您需要
*才能出售*.numberdrooms=2
。此代码将与
person.properties=params
新人员(params)
一起使用

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


希望这有帮助。

如果您检查我的代码,您会看到我正在使用forSale.numberdrooms,并且我更改了url参数以引用它。当我检查URL参数时,我将forSale字段分组到一个对象中。此外,我还按照您的建议,使用参数指定属性。问题是我的表行没有得到更新。堆栈中的某些东西,无论是grails还是hibernate,都在默默地失败。我已经打开了所有的调试日志记录和一个128Mb的日志文件,没有消息说更新失败。我不知道发生了什么。你的代码有你需要的代码