未保存用户的Grails面包屑列表

未保存用户的Grails面包屑列表,grails,breadcrumbs,Grails,Breadcrumbs,您好,我一直在尝试为一个定制的Grails应用程序实现一个向下钻取类型的面包屑导航,但似乎无法理解为什么Cramp对象没有保存在Arraylist中 面包屑被创建并添加到列表中,但每当我导航到另一个页面时,列表就会重置 我知道有一个Grails面包屑插件,但是我无法将它用于这个特定的应用程序 下面是一些代码示例 域类: class User { transient springSecurityService String username String password boolea

您好,我一直在尝试为一个定制的Grails应用程序实现一个向下钻取类型的面包屑导航,但似乎无法理解为什么Cramp对象没有保存在Arraylist中

面包屑被创建并添加到列表中,但每当我导航到另一个页面时,列表就会重置

我知道有一个Grails面包屑插件,但是我无法将它用于这个特定的应用程序

下面是一些代码示例

域类:

class User {

 transient springSecurityService

 String username
 String password
 boolean enabled
 boolean accountExpired
 boolean accountLocked
 boolean passwordExpired

 ArrayList <Crumb> BreadCrumbs = new ArrayList<Crumb>(); 

 static auditable = true

 static constraints = {
    username blank: false, unique: true
    password blank: false
    enabled(default:true)

 }


class Crumb {

String itemName
String url

static belongsTo = User

static constraints = {
itemName(nullable: false)
    url(nullable: false)
}

def printData(){

    println("Crumb Data PrintOut: \nName: " + itemName +"\nUrl: " + url)
}


}

class BreadCrumbService {

 Crumb makeCrumb(String objectType, String name, long objectId){
    def ext = "/its/dcmd/" + objectType + "/show?id=" + objectId;
    def type = objectType;
    Crumb c = new Crumb(itemName:name,url:ext)
    return c
}
类用户{
临时安全服务
字符串用户名
字符串密码
布尔启用
布尔帐户已过期
布尔帐户锁定
布尔密码过期
ArrayList BreadCrumbs=新的ArrayList();
静态可审核=真
静态约束={
用户名空白:false,唯一:true
密码空白:false
已启用(默认值:true)
}
面包屑{
字符串itemName
字符串url
静态belongsTo=用户
静态约束={
itemName(可空:false)
url(可空:false)
}
def printData(){
println(“碎屑数据打印输出:\nName:+itemName+”\nUrl:+url)
}
}
类面包搜索服务{
CREAM MAKECREAM(字符串对象类型、字符串名称、长对象ID){
def ext=“/its/dcmd/”+objectType+”/show?id=“+objectId;
def type=objectType;
碎屑c=新碎屑(itemName:name,url:ext)
返回c
}
控制器:

class PersonController{

def setBreadCrumbForCurrentItem = {
    println("Action was called to set breadcrumb for current page")

 def user = User.load(SecurityContextHolder.context.authentication.principal.id)
 def username = user.username
 def userId = user.id

 println("User Id: " + user.id)
 println("User Version: " + user.version)


def objectType = params.pageType
println("objectType: " + objectType)

def itsName = ""
def objectId = null;
if (objectType.equals('asset')){

    Asset assetInstance = params.instance
    itsName = assetInstance.itsId
    objectId = assetInstance.id
    println("asset name: " + itsName)
    println("asset id: " + objectId)
}
else if (objectType.equals('host')){
    Host hostInstance = Host.get(params.id)
    itsName = hostInstance.hostname
    objectId = hostInstance.id
    println("host name:" + itsName)
    println("host id: " + objectId)
}
else if (objectType.equals('application')){
    Application appInstance = new Application(params)
    itsName = appInstance.applicationTitle
    objectId = appInstance.id
    println("application name:" + itsName)
    println("application id: " + objectId)
}
else if (objectType.equals('service')) {
    Service service = new Service(params)
    itsName = service.serviceTitle
    objectId = service.id
    println("service name:" + itsName)
    println("service id: " + objectId)
}


 Crumb c = breadCrumbService.makeCrumb(objectType,itsName,objectId);
 c.save(failOnError: true, flush: true)
 if (!c.save()) {
     user.errors.each {
         println it
     }
 }
 c.printData()

println("current BreadCrumbs saved...")

     for (int j = 0; j < user.BreadCrumbs.size(); j++){
         println(user.BreadCrumbs.get(j).toString())
     }

 user.save(failOnError: true, flush: true)
 println("User Version: " + user.version)

 if (!user.save()) {
     user.errors.each {
         println it
     }
 }

 }
类PersonController{
def setBreadCrumbForCurrentItem={
println(“调用操作为当前页面设置面包屑”)
def user=user.load(SecurityContextHolder.context.authentication.principal.id)
def username=user.username
def userId=user.id
println(“用户Id:+User.Id”)
println(“用户版本:”+User.Version)
def objectType=params.pageType
println(“objectType:+objectType”)
def itsName=“”
def objectId=null;
if(objectType.equals('asset')){
资产assetInstance=params.instance
itsName=assetInstance.itsId
objectId=assetInstance.id
println(“资产名称:”+其名称)
println(“资产id:+objectId”)
}
else if(objectType.equals('host')){
Host hostInstance=Host.get(params.id)
itsName=hostInstance.hostname
objectId=hostInstance.id
println(“主机名:”+itsName)
println(“主机id:+objectId”)
}
else if(objectType.equals('application')){
应用程序appInstance=新应用程序(参数)
itsName=appInstance.applicationTitle
objectId=appInstance.id
println(“应用程序名称:”+其名称)
println(“应用程序id:+objectId”)
}
else if(objectType.equals('service')){
服务=新服务(参数)
itsName=service.servicetTitle
objectId=service.id
println(“服务名称:”+itsName)
println(“服务id:+objectId”)
}
Crumb c=breadCrumbService.makeCrumb(objectType,itsName,objectId);
c、 保存(failOnError:true,flush:true)
如果(!c.save()){
user.errors.each{
打印它
}
}
c、 printData()
println(“保存的当前面包屑…”)
对于(int j=0;j
视图:


%{----}%
任何反馈都是非常感谢提前!
感谢您的控制器

Crumb c = breadCrumbService.makeCrumb(objectType,itsName,objectId);
 c.save(failOnError: true, flush: true)
 if (!c.save()) {
     user.errors.each {
         println it
     }
 }
 c.printData()
除非我遗漏了什么或者您列出的代码不完整,否则,在保存之前,您永远不会在用户和Crumb之间建立关系!

还有,你应该

if(!c.save(failOnError:true, flush:true))
按你的方式,你省了两次钱

if(!c.save(failOnError:true, flush:true))