找不到匹配的构造函数Grails错误

找不到匹配的构造函数Grails错误,grails,grails-2.0,Grails,Grails 2.0,我有一个带有安全官员标志的用户域和一个用于保存我web应用程序中所有位置的位置域。我想允许管理员在选中security officer标志的情况下,从所有用户的选择列表中为任何位置分配一个主要和次要安全官员。我在一个手工制作的MVC结构中工作,但我目前正在玩脚手架,遇到了一个奇怪的错误,我无法理解。我的位置域编码为 class Location { static hasMany = [users:User] Integer id ... String add

我有一个带有安全官员标志的用户域和一个用于保存我web应用程序中所有位置的位置域。我想允许管理员在选中security officer标志的情况下,从所有用户的选择列表中为任何位置分配一个主要和次要安全官员。我在一个手工制作的MVC结构中工作,但我目前正在玩脚手架,遇到了一个奇怪的错误,我无法理解。我的位置域编码为

class Location {

    static hasMany = [users:User] 

    Integer id
    ...
    String address
    String city
    State state
    String zip
    ...
    User primarySecurityOfficer
    User secondarySecurityOfficer

    static mapping = {
        table 'location'
        id generator: 'identity'
        sort "state"
        version false
    }

    static constraints = {
        ...
        address(blank: false, nullable: false)
        city(blank: false, nullable: false)
        state(blank: false, nullable: false)
        zip(blank: false, nullable: false, size: 5..5)
        ...
        primarySecurityOfficer(blank: true, nullable: true)
        secondarySecurityOfficer(blank: true, nullable: true)
    }
}
我用grailsgeneratealllocation生成了视图。我将生成的
\u form.gsp
中的安全官员选择修改为

<div class="fieldcontain ${hasErrors(bean: locationInstance, field: 'primarySecurityOfficer', 'error')}">
  <label for="primarySecurityOfficer">
    <g:message code="location.primarySecurityOfficer.label" default="Primary Security Officer" />
  </label>
  <g:select id="primarySecurityOfficer" name="primarySecurityOfficer" value="${locationInstance?.primarySecurityOfficer?.employeeNumber}" from="${securityOfficers}" optionKey="employeeNumber" optionValue="${{it.firstName + ' ' + it.lastName}}" noSelection="${['null':' ']}" disabled="${disabled}"/>
</div>

<div class="fieldcontain ${hasErrors(bean: locationInstance, field: 'secondarySecurityOfficer', 'error')}">
  <label for="secondarySecurityOfficer">
    <g:message code="location.secondarySecurityOfficer.label" default="Secondary Security Officer" />
  </label>
  <g:select id="secondarySecurityOfficer" name="secondarySecurityOfficer" value="${locationInstance?.secondarySecurityOfficer?.employeeNumber}" from="${securityOfficers}" optionKey="employeeNumber" optionValue="${{it.firstName + ' ' + it.lastName}}" noSelection="${['null':' ']}" disabled="${disabled}"/>
</div>
我得到的错误是,如果我选择任何安全人员并尝试保存新位置,我会得到错误
无法找到与:User(java.lang.String)
匹配的构造函数。如果我将选择器留空,则位置将成功保存。你知道为什么吗

编辑1:从修补中发现有趣的东西。如果我将查看代码更改为,我可以成功地将安全官员保存到位置

<div class="fieldcontain ${hasErrors(bean: locationInstance, field: 'primarySecurityOfficer', 'error')}">
  <label for="primarySecurityOfficer">
    <g:message code="location.primarySecurityOfficer.label" default="Primary Security Officer" />
  </label>
  <g:select id="primarySecurityOfficer.employeeNumber" name="primarySecurityOfficer.employeeNumber" value="${locationInstance?.primarySecurityOfficer?.employeeNumber}" from="${securityOfficers}" optionKey="employeeNumber" optionValue="${{it.firstName + ' ' + it.lastName}}" noSelection="${['null':' ']}" disabled="${disabled}"/>
</div>

<div class="fieldcontain ${hasErrors(bean: locationInstance, field: 'secondarySecurityOfficer', 'error')}">
  <label for="secondarySecurityOfficer">
    <g:message code="location.secondarySecurityOfficer.label" default="Secondary Security Officer" />
  </label>
  <g:select id="secondarySecurityOfficer.employeeNumber" name="secondarySecurityOfficer.employeeNumber" value="${locationInstance?.secondarySecurityOfficer?.employeeNumber}" from="${securityOfficers}" optionKey="employeeNumber" optionValue="${{it.firstName + ' ' + it.lastName}}" noSelection="${['null':' ']}" disabled="${disabled}"/>
</div>


但是现在没有安全官员我就救不了人。如果我尝试输入不可解析的数字,则得到的错误是:“null”

如果您将域更改为:stringoficertype,然后在约束中创建一个inList:['Primary Officer','Secondary Officer',],然后继续生成所有。inList将生成带有下拉列表的_form.gsp。请同时添加用户域。另外,在第二种情况下,当您为securityofficer选择no值时,会出现不长的null值。您可以通过在选择框中添加-1代替null来解决此问题。
<div class="fieldcontain ${hasErrors(bean: locationInstance, field: 'primarySecurityOfficer', 'error')}">
  <label for="primarySecurityOfficer">
    <g:message code="location.primarySecurityOfficer.label" default="Primary Security Officer" />
  </label>
  <g:select id="primarySecurityOfficer.employeeNumber" name="primarySecurityOfficer.employeeNumber" value="${locationInstance?.primarySecurityOfficer?.employeeNumber}" from="${securityOfficers}" optionKey="employeeNumber" optionValue="${{it.firstName + ' ' + it.lastName}}" noSelection="${['null':' ']}" disabled="${disabled}"/>
</div>

<div class="fieldcontain ${hasErrors(bean: locationInstance, field: 'secondarySecurityOfficer', 'error')}">
  <label for="secondarySecurityOfficer">
    <g:message code="location.secondarySecurityOfficer.label" default="Secondary Security Officer" />
  </label>
  <g:select id="secondarySecurityOfficer.employeeNumber" name="secondarySecurityOfficer.employeeNumber" value="${locationInstance?.secondarySecurityOfficer?.employeeNumber}" from="${securityOfficers}" optionKey="employeeNumber" optionValue="${{it.firstName + ' ' + it.lastName}}" noSelection="${['null':' ']}" disabled="${disabled}"/>
</div>