grails项目中遇到的错误

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) { }) 错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值