简体   繁体   English

无法重定向对象[ManageVehicle :( unsaved)]它不是域或没有标识符。 请改用显式重定向

[英]Cannot redirect for object [ManageVehicle : (unsaved)] it is not a domain or has no identifier. Use an explicit redirect instead

This is my domain. 这是我的域名。

import org.apache.commons.lang.builder.EqualsBuilder
import org.apache.commons.lang.builder.HashCodeBuilder

class ManageVehicle implements Serializable {
    String vehicle
    Short truckKey=0
    Short siteID
    Integer unitID
    String wheelConfig
    String model
    Short period=0
    String usid=UUID.randomUUID().toString()
    //static belongsTo = [wheelConfig : TTType,model:TTModel]
    int hashCode() {
        def builder = new HashCodeBuilder()
        builder.append truckKey
        builder.append siteID
        builder.toHashCode()
    }

    boolean equals(other) {
        if (other == null) return false
        def builder = new EqualsBuilder()
        builder.append truckKey, other.truckKey
        builder.append siteID, other.siteID
        builder.isEquals()
    }

    static mapping = {
        table 'TF_Truck'
        version false
        truckKey column :'TruckKey'
        siteID column :'SiteID'
        id composite:['truckKey','siteID']
        vehicle column: 'TruckID' ,sqlType: 'nvarchar'
        wheelConfig column: 'TypID',sqlType: 'tinyint'
        model column: 'ModID' ,sqlType: 'tinyint'
        unitID column: 'McmID',sqlType: 'tinyint'
        period column: 'Period'
        usid generator: 'assigned', column:'USID', sqlType:'uniqueidentifier'
    }
    static constraints = {
        period nullable: false
        truckKey nullable: false
        siteID nullable: false
    }
}

And my save method in controller is . 而我在控制器中的保存方法是。

def save(ManageVehicle manageVehicleInstance) {
    manageVehicleInstance.siteID=RequestContextHolder.currentRequestAttributes().getAttribute("SiteID",RequestAttributes.SCOPE_SESSION) as Short
    if (manageVehicleInstance == null) {
        notFound()
        return
    }

    if (manageVehicleInstance.hasErrors()) {
        respond manageVehicleInstance.errors, view:'create'
        return
    }

    manageVehicleInstance.save(flush:true,failOnError: true)

    request.withFormat {
        form {
            flash.message = message(code: 'default.created.message', args: [message(code: 'manageVehicle.label', default: 'Manage Vehicle'), manageVehicleInstance.id])
            redirect manageVehicleInstance
        }
        '*' { respond manageVehicleInstance, [status: CREATED] }
    }
}

while i am applying save operation on this domain i am getting following exception . 当我在这个域上应用保存操作时,我得到以下异常。

Message: Cannot redirect for object [ManageVehicle : (unsaved)] it is not a domain or has no identifier. Use an explicit redirect instead 

Suggest me some solution. 建议我一些解决方案。

I guess that Grails cannot handle composite id in redirection. 我猜Grails无法在重定向中处理复合id。 I have two options in my mind to fix that case 我有两个选择来解决这个问题

  1. Create id field for your domain class by removing id line from mappings 通过从映射中删除id行来为您的域类创建id字段
  2. Implement custom redirection for your saved object like redirect(action:'show', params:[truckKey:manageVehicleInstance.truckKey,siteID:manageVehicleInstance.siteID]) 为您保存的对象实现自定义重定向,例如redirect(action:'show', params:[truckKey:manageVehicleInstance.truckKey,siteID:manageVehicleInstance.siteID])

With 2. option you may also have to implement custom object loading into 'show' action using composite id like def manageVehicleInstance = ManageVehicle.findByTruckKeyAndSiteID(params.truckKey, params.siteID) . 使用2.选项,您可能还必须使用复合ID(例如def manageVehicleInstance = ManageVehicle.findByTruckKeyAndSiteID(params.truckKey, params.siteID)将自定义对象加载到“show”操作中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM