<p>
</p>
由于刚接触grails,并不是特别熟,前天做开发时碰到一个问题,我需要用表单提交到后台添加,如果单一对象还可以直接提交,但是如果是多个对象,one2one,one2many,怎么提交?而且数据的字段很多的时候不肯能在后台NEW一个对象,再set,所以封装成一个完整对象提交到后台,直接保存该对象,这样代码看起来也比较清爽,这个在S2SH里是很简单的能实现的,最开始用S2SH提交,能完整提交,但是保存有问题,后来百度,奈何grails用的人并不多,所以没找到理想的答案,后来问同事,也没解决,说这能把对象分开提交,后来集合同事说的和百度上介绍的还真搞出来了。在此写下笔记,由于第一次写博客,可能写得不是很好。
下面把关键地方写一下,
比如有个用户注册的表单,注册的表有两个,一个用户类型表,一个用户表,其中用户表中外键引用用户类型表的主键
表单原代码如下
<g:form url="[controller:'user',action:'add]" method="post" id="myForm">
用户类别:<select name='User.userType.id'>
<option value='1'>学生</option>
<option value='2'>老师</option>
</select>
用户名:<input type='text' name='User.name'/>
密码:<input type='password' name='User.pwd'/>
</g:form>
name属性就是你需要保存的那个对象,后跟属性,由于grails提交表单的时候会把controller和action都提交到后台,所以在直接保存的该对象的时候会出现问题,需要对传过来的对象进行一次处理,把接到的对象由controller传递到service层,service层拿到该对象后先new一个User类,代码如下:
User user = new User();
user.properties = params.User;
这样处理之后就可以直接保存了,直接用新new的User调save(),
user.save(flush: true);