2015-10-26 33 views
0

我正在使用命令对象,并在命令对象内使用了一个域对象,如下所示。找不到匹配的构造函数:DomainObjectName(java.lang.String)

class JobCommand { 
    List<Country> countries 
    String name 
    String age 
    ..... 
} 

国家域名如下:

@EqualsAndHashCode(includes="id") 
class Country{ 
String id 
String name 
Date createDate 
...... 
} 

我从我的JobController访问该jobCommand对象并以我GSP页面设置在我的国家字段的值。 我有我的GSP页面命名为国家搜索领域,它有像,美国,印度,伊朗等国家的选项

<g:select name="countries" id="country" 
     from="${Country.findAll()}" 
     value="${jobCommand ?.countries}" 
     multiple="true" 
     optionKey="id" 
     optionValue="name" 
/> 

当我选择多个国家,并点击搜索按钮,我得到的异常“找不到匹配的构造函数:package.Country(java.lang.String)“。

+0

为什么G:名为*国家选择标记*但命令对象属性被命名为*国家*? –

+0

嗨罗莎,谢谢你的评论。其实你是对的。这是我的打字错误。 g:选择标签名称仅为“国家”。我纠正了这个问题。 – Ryan

+0

很明显,构造函数丢失。但是,哪一行代码会抛出异常? –

回答

1

有两种方法将命令绑定到Command对象。 1.使用bindData(http://docs.grails.org/3.1.1/ref/Controllers/bindData.html) 2.编写我们自己的转换器。我有同样的问题,我写了我自己的转换器。

步骤来写自己的转换器: 创建转换器类与以下方法:

boolean canConvert(value) { 
     value instanceof String 
    } 

    def convert(value) { 
     //your logic 
    } 

    Class<?> getTargetType() { 
     //your type 
    } 

注册您的转换器在resources.groovy内豆{}

相关问题