1、Failed to compile war.groovy
程序昨天之前好好地,过了一夜,grails,直接进不去了。jdk版本等都没有问题。
解决办法:
手动删除build文件夹
2、grails new thread中不能向数据库中保存数据吗?
可能解决办法:
SessionFactory sessionFactory = grailsApplication.getMainContext().getBean("sessionFactory");
boolean participate = ConcurrentUtil.bindHibernateSessionToThread(sessionFactory);
ConcurrentUtil.closeHibernateSessionFromThread(participate, sessionFactory);
3、Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect
出现上述错误的代码:
domain:
service:
def fee = Fee.findBySerialNumber(trustChagRate.id)
if (!fee)
{
fee = new Fee()
}
fee.fund = fund
fee.serialNumber = trustChagRate.id
解决办法:
在该 action 上面 或者 调用该service的action上 加上注解: @Transactional
4、Cannot redirect for object […]it is not a domain or has no identifier
Issue:
控制器继承RestfulController, ETL导数据调用这边的接口。报错:
Reason:
原因: domain中使用了复合主键,这样的话,id不会有值
Solution:
传个id过来即可。id的值可以一样。
5、网页上传图片不成功
class Goods {
String title
String description
BigDecimal price
String photoUrl
Category category
static belongsTo = Category
static constraints = {
photoUrl nullable: true
}
}
create创建页面:
<g:uploadForm url="[resource:goodsInstance, action:'save']" >
<fieldset class="form">
<g:render template="form"/>
</fieldset>
<fieldset class="buttons">
<g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" />
</fieldset>
</g:uploadForm>
<div class="fieldcontain ${hasErrors(bean: goodsInstance, field: 'photoUrl', 'error')} required">
<label for="photoUrl">
<g:message code="goods.photoUrl.label" default="Photo Url" />
<span class="required-indicator">*</span>
</label>
<input type= "file" id= "photoUrl " name= "photoUrl" />
</div>
controller中的save方法:
String photoUrl=uploadImage()//调用上传图片的方法,返回一个储//存图片的路径。
goodsInstance.photoUrl=photoUrl//存储图片路径
if (goodsInstance.hasErrors()) {
println 'errors:----'+goodsInstance.errors
respond goodsInstance.errors, view:'create'
return
}
def uploadImage(){//上传图片到本地文件夾中
def f = request.getFile('photoUrl')//获取前台页面表单控//中的文件名称
println f
if (!f.empty) {
def webRootDir = servletContext.getRealPath("/")
def userDir = new File(webRootDir, "/payload/")
userDir.mkdirs()
f.transferTo(new File(userDir, f.originalFilename))
println f.originalFilename
return f.originalFilename
}
}
实现上传图片,一点击create,就出现上面的界面,跟踪问题,发现goodsInstance.hasError()的时候出错。
控制台上打印出错:errors:—- …..
解决办法:
更改页面中的name和id 此处不能为photoUrl
页面中显示图片:
<img src="${createLinkTo(dir:'payload',
file:''+goodsInstance.photoUrl)}"
alt="${goodsInstance.photoUrl}"
title="${goodsInstance.photoUrl}" />
6、一对多关系,book表中插不进去数据
def category = new my.Category(categoryName:'Book')
if (category.save()) {
println 'new category saved!'
def goods1 = new my.Goods(title:'Grails',price:20.0,
description:'Grails Book...',photoUrl:'')
goods1.category = category
if (goods1.save()) {
println 'goods1 saved!'
}
def goods2 = new my.Goods(title:'Groovy',price:20.0,
description:'Groovy Book...',photoUrl:'')
goods2.category = category
if (goods2.save()) {
println 'goods2 saved!'
}
}
class Goods {
String title
String description
BigDecimal price
String photoUrl
Category category
static belongsTo = Category
}
class Category {
String categoryName
static hasMany = [goods:Goods]
static constraints = {
categoryName(unique:true)
}
}
解决办法:
增加nullable:true的约束
7、No signature of method 或者 logical expression [not] must contain at least 1 expression
注意:此处不是Not而是not。
eq错写成equal,会报错:
8、
cart(validator: { cart -> }) 正确
cart(validator(cart) { }) 错误